最近我学会了如何编写简单的字符驱动程序,并在玩弄代码时发现我的C99代码经常会出现大量以下GCC警告:
warning: ISO C90 forbids mixed declarations and code
我猜测这是因为主要的Linux内核Makefile设置了使用非C99标准进行编译。我在网上搜索并在stackoverflow上找到了这个答案:如何使用make并编译为C99?。所以我自然地尝试在我的Makefile中加入以下内容:
ccflags-y := -std=gnu99
不幸的是,这并没有消除GCC警告。我检查了make
的详细输出,并验证了GCC确实在末尾使用了-std=gnu99
;所以我有点困惑。
我应该如何使用-std=gnu99
选项正确编译Linux内核模块?
编辑:
我注意到GCC输出显示了这个选项:-Wdeclaration-after-statement
。这就是即使有-std=gnu99
选项我还收到警告的原因吗?
const int numTimesFooDone=doFoo();
,那么你就会很难实现它。你必须将numTimesFooDone
保持为非const
,并冒着在稍后某个地方不经意间错误地覆盖它而不注意的风险,例如if(numTimesFooDone=3)...
。这只是从程序员那里剥夺了一些有用的编译器帮助。 - Ruslan