25

应该设置哪些 GCC 选项以使 GCC 尽可能严格?(我的意思是尽可能严格)我正在用 C89 编写并希望我的代码符合 ANSI/ISO。

4

2 回答 2

24

我建议使用:

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

如果你幸运的话,你就不用担心这个了。我在工作中没有那么幸运,而且我不能使用严格的原型,这让我很懊恼,因为周围有太多草率的函数指针。

另请参阅:清理代码的最佳命令行工具是什么

于 2012-01-20T19:35:28.763 回答
7

这组选项非常好:

-Wall -Wextra -ansi -pedantic

您必须阅读文档以查看该组合是否遗漏了任何额外的警告。

应该警告您,严格的 C89 不包括对//样式注释的支持,并且对具有外部链接的对象名称中重要字符的数量有一些非常严格的限制。

于 2012-01-20T19:27:46.023 回答