xmj@hellogcc.org
将函数声明放在头文件里,然后在C文件中包含进来,是一个好的习惯。不然,则可有能导致系统中非常隐蔽的错误。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ cat prototype.c int main (void) { fun (1); return 0; } void fun (void) { } $ gcc prototype.c prototype.c:9: warning: conflicting types for ‘fun’ prototype.c:4: note: previous implicit declaration of ‘fun’ was here |
这里,gcc只给出了警告信息!然而不匹配的传参操作很可能会造成部分代码(还是数据?)被覆写,程序便会出现非常诡异的现象。
1 2 3 4 5 6 | $ gcc prototype.c -Werror=implicit-function-declaration prototype.c: In function ‘main’: prototype.c:4: error: implicit declaration of function ‘fun’ prototype.c: At top level: prototype.c:9: warning: conflicting types for ‘fun’ prototype.c:4: note: previous implicit declaration of ‘fun’ was here |
可以强制将警告信息升级为错误信息来避免这类问题。
后记(来自xunxun):
可以直接打开-Werror检查所有的warning。
另外,检查语法是否合乎指定的标准(ISO标准)可以用下列开关
检查C99
-std=c99 -pedantic
当然可以用
-pedantic-errors
不产生警告直接提示错误