11

私は最近、単純な文字ドライバーをプログラムする方法を学びました。コードをいじっていると、C99 コードに対して次のような GCC 警告が多数スローされることに気付きました。

warning: ISO C90 forbids mixed declarations and code

これは、メインの Linux カーネルの Makefile が C99 以外の標準を使用してコンパイルするように設定されているためだと思います。周りを検索したところ、stackoverflow でこの回答が見つかりました: How to use make and compile as C99?

したがって、私は自然に Makefile で次のことを試しました。

ccflags-y := -std=gnu99

残念ながら、これは GCC 警告を黙らせませんでした。の詳細な出力をmake確認し、GCC が実際に実行さ-std=gnu99れ、最後に追加されていることを確認しました。だから私は少し混乱しています。

-std=gnu99オプションを使用して Linux カーネル モジュールを正しくコンパイルするにはどうすればよいですか?

編集

GCC 出力にこのオプションが表示されていることに気付きました: -Wdeclaration-after-statement. -std=gnu99これが、オプションを使用しても警告が表示される理由ですか?

4

2 に答える 2

20

-std=gnu99 実際にはうまくいくことがわかりました。コンパイラ フラグを削除した後、C99 機能に関するエラーが表示されるようになりました。つまり、-std=オプション以外に警告が出力される原因が他にあるということです。

を介して詳細な出力を解析した後、GCC 実行の一部としてオプションmake V=1を発見しました。-Wdeclaration-after-statementこれが、私が見た ISO C90 混合宣言の警告の原因でした。

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

例えば:

ccflags-y := -std=gnu99 -Wno-declaration-after-statement
于 2013-04-09T20:38:41.853 に答える
0

フラグがある場合は、 Makefileでフラグを指定することもできます。

FLAGS=-std=gnu99
于 2014-09-26T21:29:53.417 に答える