2013-04-09 31 views
6

は、私は最近、単純な文字のドライバをプログラムする方法と、私は気づいたコードで遊んでいる間、私は私の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オプションを使用しても警告が表示されるのはなぜですか?

+0

GCCは可能性がありますので、Linuxのメイクファイルがintially、あなたのモジュールの前に呼び出されます混合std =定義を得る。 – stdcall

+4

関数の始めにすべての変数を宣言して、そのように警告を取り除くのはなぜですか? – Gonzalo

+1

これはおそらく、Linusが嫌うものの1つであるC99(宣言後のステートメント)の機能だからです。だから、Linuxコーディングスタイルはこれを禁じています。 –

答えて

11

実際には-std=gnu99となります。私はコンパイラフラグを削除した後、C99の機能に関するエラーを見始めた。つまり、-std=オプションのほかに何か警告が表示されていたということです。

make V=1で冗長出力を解析した後、GCC実行の一部として-Wdeclaration-after-statementオプションが検出されました。これは私が見たISO C90混在宣言の警告の原因でした。

ISO C90の警告を無効にするには、これをGCC:-Wno-declaration-after-statementに渡します。

例えば

:あなたは1を持っている場合にも、あなたののMakefileにフラグを指定することができ

ccflags-y := -std=gnu99 -Wno-declaration-after-statement 
-1

FLAGS=-std=gnu99 
関連する問題

 関連する問題