最严格C代码的GCC选项?[重复]

vpfxa7rd  于 2023-03-22  发布在  其他
关注(0)|答案(2)|浏览(163)

此问题在此处已有答案

Recommended GCC warning options for C [closed](15个答案)
八年前就关门了。
应该设置什么GCC选项来使GCC尽可能严格?(我的意思是尽可能严格)我用C89编写,希望我的代码符合ANSI/ISO。

vuktfyat

vuktfyat1#

我建议使用:

-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; { ... }

如果你幸运的话,你就不需要担心这个了。我在工作中就没有那么幸运了,我不能使用严格的原型,这让我很懊恼,因为周围有太多草率的函数指针。
另请参阅:What is the best command-line tool to clean up code

a2mppw5e

a2mppw5e2#

这一组选项相当不错:

-Wall -Wextra -ansi -pedantic

您必须阅读文档,以查看该组合是否遗漏了任何额外的警告。
应该注意的是,严格的C89不支持//样式的注解,并且对具有外部链接的对象名称中的有效字符数有一些非常严格的限制。

相关问题