lynx   »   [go: up one dir, main page]

タグ

Cとgccに関するraimon49のブックマーク (12)

  • トーバルズ氏、Linuxカーネルを「C89」から「C11」コードに移行する準備

    Steven J. Vaughan-Nichols (Special to ZDNET.com) 翻訳校正: 村上雅章 野崎裕子 2022-03-04 11:33 LinuxカーネルがCで記述されているというのは誰もが知るところだ。ただ、そのCがかなり昔のC、すなわち1989年の規格である「C89」だという事実については知らない人もいるかもしれない。C89は「ANSI X3.159-1989」、あるいは「ANSI C」としても知られている。Linus Torvalds氏は、そろそろC89に別れを告げる時だと判断し、Linuxカーネルの公式な開発言語を2011年規格の「C11」に移行しようとしている。 これは見かけほど大きな変更ではない。C89は現在でもほぼ普遍的にサポートされている。どのようなCコンパイラーでも以前の規格との後方互換性を備えているため、C89で記述されたプログラムのコンパイ

    トーバルズ氏、Linuxカーネルを「C89」から「C11」コードに移行する準備
  • C言語で配列の要素数を安全に数える話

    C言語で配列の要素数を数えるイディオムってのがあって、 sizeof(array) / sizeof(array)なんだけど、配列名が長くなって、たとえば sizeof(var.that_has_an_array.as_a.member) / sizeof(var.that_has_an_array.as_a.member[0])とかになるとカオス。 なので、ベンダーによっては、 #define _countof(array) (sizeof(array) / sizeof(array[0]))みたいなマクロを提供していたりするんだけど、こうやって、何も考えずに使えるようにしていくと、配列ではなくポインタを引数に渡しちゃって、サイズ計算ミスって変な動作する懸念が増してくる。 なので、Twitterで C言語で、ある値がポインタなのか配列なのかを知る方法ってあるのかなぁ(gcc/clang拡

  • 令和時代のRubyコア開発 - k0kubun's blog

    Ruby Core Development 2019というタイトルでRubyKaigiのCFPにプロポーザルを書いたのだが、 もう一つ書いた方の話が採択されたのでその話はしなかった。 さて、今日はRubyコア*1の開発がSubversionからGitに移った節目でもあったので、そっちのトークで言いたかったことの一部を記事にしておこうと思う。 Subversion → Git 移行 [Misc #14632] 去年くらいから @hsbt さんが cgit というGitフロントエンドを使ってGitリポジトリの準備を始め Misc #14632、ついに今日正式にcgitの方がupstreamになった。平成の時代でSubversionでのtrunkのRubyコア開発は幕を閉じた。 この辺を進めているのは主に @hsbt さんな中、僕がこれを偉そうに書いたり今回のRubyKaigiで壇上でアナウンス

    令和時代のRubyコア開発 - k0kubun's blog
    raimon49
    raimon49 2019/04/23
    プロジェクトXみたいで、めちゃ面白い。
  • C言語がコンパイルされて実行可能になるまでの流れ - にょきにょきブログ

    コンパイルの処理は大きく分けて下記の処理にわけられる。 プリプロセス コンパイル アセンブル リンク この記事では、C言語の Hello World を過程毎に追い、プログラムが出来上がるまでの流れを追う。 登場するファイル main.c - ソースファイル main.s - ソースファイルからコンパイルされたアセンブラソースファイル main.o - アセンブル後のオブジェクトファイル main - 出来上がったバイナリ ソースコード 普通の C 言語の Hello World. 下記コードを main.c として保存する。 #include <stdio.h> int main(){ printf("Hello world!\n"); return 0; } プリプロセス プリプロセスとは、マクロの展開や #include や #ifdef などのディレクティブの処理が行われることを指

    C言語がコンパイルされて実行可能になるまでの流れ - にょきにょきブログ
  • コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記

    僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに

    コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記
    raimon49
    raimon49 2016/12/04
    インターネットの素晴らしさ。
  • C言語の全角文字コメント行がコンパイルエラーを起こすことがある - 生物物理計算化学者の雛

    エラーを引き起こすコメント行 とあるC言語のプログラムを Windows 上の Visual Studio 2008 で編集・作成し、完成したソースコードを Linux マシンにコピーし gcc でコンパイルしてデータ処理を実行という流れで作業を行っていました。 その際に、ある全角文字を含むコメント行が存在するとエラーが生じるという現象に遭遇しました。 このエラーを再現するプログラムは以下のようなものです。 #include <stdio.h> int main(void) { int n = 10; // n の値により分岐可能 if(n > 5){ printf("Large\n"); }else{ printf("Small\n"); } return 0; } このソースコードは、Visual Studio上では何の問題もなくコンパイル、実行できます。 しかしながら、Linux

    C言語の全角文字コメント行がコンパイルエラーを起こすことがある - 生物物理計算化学者の雛
    raimon49
    raimon49 2016/04/19
    バックスラッシュを含むShift_JISのダメ文字問題。
  • GCC 5系初のリリースとなる「GCC 5.1」登場 | OSDN Magazine

    GNU ProjectとGCC開発者は4月22日、「GNU Complier Collection(GCC)5.1」」を公開した。Cのデフォルトモードの変更、最適化エンジンの強化、JITコンパイラ対応など多数の機能が盛り込まれている。 2014年4月に公開されたGCC 4.9に続くもので、GCC 5系で最初のリリースとなる。変更点としては、まずCのデフォルトモードが-std=gnu89(GNU89)から-std=gnu11(ISO C11ベースのGNU11)に変更された。また、C++ランタイムライブラリlibstdc++ではデフォルトで新しいABIを利用するようになっている。古いABIのサポートも継続するデュアルライブラリとなり、「_GLIBCXX_USE_CXX11_ABI」パラメータで利用するABIを設定できる。libstdc++ではC++11のサポートが完全対応となった。また、C++

    GCC 5系初のリリースとなる「GCC 5.1」登場 | OSDN Magazine
    raimon49
    raimon49 2015/04/27
    デフォルトABI変更
  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #1/3

    [What Every C Programmer Should Know About Undefined Behavior #1/3 の翻訳です。] LLVMでコンパイルしたコードは、最適化を有効にしているとたまにSIGTRAPシグナルを生成するのはなぜなのか、と聞かれることがある。いろいろ調べたあと、(X86での話だが) Clangは "ud2" インストラクションを生成していたことがわかった。"ud2" は__builtin_trap()が生成するインストラクションと同じものだ。[訳注: #UD例外を発生させる命令。ソフトウェアが#UD例外をハンドルできているかテストするために使われる。つまり、ソースコードが未定義な振る舞いを使っていたから、LLVMはud2インストラクションを生成したのであって、LLVMのバグではない、ということ] こういう問題は幾つかあって、すべて、Cの未定義な振る

  • こんな書き方できたんだ!? - griffin-stewieのブログ

    今日貯めてた Reading List を見てたらこんな記事が。 New thing I do in code 例 以下のようなコードが動きます。 self.downloadButton = ({ UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; NSLog(@"%s %@", __PRETTY_FUNCTION__, button); button.frame = CGRectMake(40, 40, 100, 50); [button setTitle:@"Donwload" forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIContro

    こんな書き方できたんだ!? - griffin-stewieのブログ
    raimon49
    raimon49 2013/08/22
    ブロックスコープが作れるのが良いな。
  • GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ

    RubyPythonなどのスクリプト言語では実行中に例外が発生するとバックトレースを出力してくれます。バックトレースがあるとどこで問題が発生したかがわかるためデバッグに便利です。一方、CやC++では不正なメモリアクセスをすると、バックトレースではなくcoreを残して1終了します2。デバッガーでcoreを解析するとバックトレースを確認できます。 このように、CやC++でデバッグするときにデバッガーはなくてはならない存在です。スクリプト言語にもデバッガーはありますが、デバッガーを使わなくてもデバッグできる範囲が広いため、CやC++をデバッグするときのほうがデバッガーのありがたさがわかります。 この記事では、広く使われているデバッガーであるGDBをもっと便利に使うためのGCCのコンパイルオプション-g3を紹介します。 サンプルプログラム まず、この記事で使うサンプルプログラムを示します。マクロ

    GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ
  • Clang - Wikipedia

    Clang ([ˈklæŋ]:クランのように発音[5]) は、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンド英語版)である。OpenMPディレクティブ[6]や、OpenCL C/C++カーネル言語[7]も正式サポートしている。バックエンドにLLVMのコンパイラ基盤を使用しており、LLVM 2.6以降はLLVMのリリースサイクルに組み込まれている。 Clang/LLVMベースの派生プロジェクトとして、RenderScript(英語版)、CUDAのNVCC[8]、ROCm(英語版)のHIP-Clang[9]といった、Cライクなドメイン固有言語 (DSL) を組み込んだGPGPUフレームワークにおけるコンパイラフロントエンドとしても採用されている。 プロジェクトの目標は、GNUコンパイラコレクション (GCC) を置き換えるこ

    Clang - Wikipedia
  • CVE-2012-2122 MySQL における認証迂回の脆弱性について – IIJ Security Diary

    この脆弱性は2012年5月7日にリリースされた MySQL バージョン 5.1.63 と 5.5.24 において修正されました。認証時に指定するパスワードは何でもよく、認証要求を繰り返すと一定確率でログインが可能というかなり奇妙な脆弱性です。すべての環境において発生するわけではありませんが、攻撃成立時には深刻な影響を受けます。 該当するバグチケットは以下です。リリースバージョンも同様の修正でした。 MySQL Bugs: #64884: logins with incorrect password are allowed Rapid7 により PoC や影響が確認された環境等が纏められています。 CVE-2012-2122: A Tragically Comedic Security Flaw in MySQL アプリケーションに対するコード修正は1行のみ、発生する環境が限られている、非常

    CVE-2012-2122 MySQL における認証迂回の脆弱性について – IIJ Security Diary
    raimon49
    raimon49 2012/06/18
    memcmp最適化ルーチンが使われるCPU + x86_64アーキテクチャなどの限定条件で発生 256の周期でint -> charへの暗黙的キャストが0に
  • 1
Лучший частный хостинг