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