最严格的C代码的GCC选项?
应该设置哪些GCC选项以使GCC尽可能严格? (我的意思是尽可能严格)我在C89写作并希望我的代码符合ANSI / ISO标准。
我建议使用:
-Wall -Wextra -std=c89 -pedantic -Wmissing-prototypes -Wstrict-prototypes \ -Wold-style-definition
您应该使用-O
和-g
编译,因为某些警告仅在使用优化程序时可用(实际上,我通常使用-O3
来查找问题)。 您可能更喜欢-std=gnu89
因为它会禁用库中较少的扩展名。 OTOH,如果您要编写严格的ANSI C89,也许您希望它们被禁用。 -ansi
选项等同于-std=c89
但不完全明确或灵活。
缺少的原型会警告您使用的函数(或定义的外部函数)没有原型范围。 严格的原型意味着你不能使用’空括号’来表示函数声明或定义(或函数指针); 你需要(void)
或正确的参数列表。 旧样式定义发现K&R样式函数定义,例如:
int old_style(a, b) int a; double b; { ... }
如果你很幸运,你不必担心。 我在工作上并不是那么幸运,我不能使用严格的原型,这让我很懊恼,因为周围有太多草率的函数指针。
另请参阅: 清理代码的最佳命令行工具是什么
这组选项非常好:
-Wall -Wextra -ansi -pedantic
您必须阅读文档,看看是否有任何额外的警告被该组合遗漏。
应该注意,严格的C89不包括对//
样式注释的支持,并且对具有外部链接的对象名称中的重要字符数有一些非常严格的限制。