は、私は最近、単純な文字のドライバをプログラムする方法と、私は気づいたコードで遊んでいる間、私は私のC99コードを投げ、次のGCCの警告の多くを得ることを学びました主なLinuxカーネルのMakefileは、C99以外の標準を使ってコンパイルするように設定されています。私はstackoverflowの上、ここでこの答えを見つけたの周りに検索:How to use make and compile as C99?-std = gnu99を使ってLinuxカーネルモジュールをコンパイルするには?</p> <pre><code>warning: ISO C90 forbids mixed declarations and code </code></pre> <p>私はこれがあるためであると仮定します。
は、だから私は自然に私のMakefileの中で次のことを試してみました:
ccflags-y := -std=gnu99
残念ながら、これはGCCの警告を黙りませんでした。私はmake
という冗長な出力を確認し、最後にGCCが-std=gnu99
で実行されていることを確認しました。私はちょっと混乱しています。
-std=gnu99
オプションを使用してLinuxカーネルモジュールを正しくコンパイルするにはどうすればよいですか?
EDIT:-Wdeclaration-after-statement
:
私はGCCの出力は、このオプションを示して気づきました。これで、-std=gnu99
オプションを使用しても警告が表示されるのはなぜですか?
GCCは可能性がありますので、Linuxのメイクファイルがintially、あなたのモジュールの前に呼び出されます混合std =定義を得る。 – stdcall
関数の始めにすべての変数を宣言して、そのように警告を取り除くのはなぜですか? – Gonzalo
これはおそらく、Linusが嫌うものの1つであるC99(宣言後のステートメント)の機能だからです。だから、Linuxコーディングスタイルはこれを禁じています。 –