c - 最严格的 C 代码的 GCC 选项?

标签 c gcc ansi iso strict

<分区>

应该设置哪些 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 但不那么明确或灵活。

缺少原型(prototype)会警告您在范围内没有原型(prototype)的情况下使用的函数(或定义的外部函数)。严格的原型(prototype)意味着你不能对函数声明或定义(或函数指针)使用“空括号”;您需要 (void) 或正确的参数列表。旧风格定义点了 K&R 风格的函数定义,例如:

int old_style(a, b) int a; double b; { ... }

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

另请参阅:What is the best command-line tool to clean up code

关于c - 最严格的 C 代码的 GCC 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946797/

相关文章:

c - 希望通过 C 中等效的 ASCII 值将 int 存储在 char 数组中

c - C 中循环和条件的问题

c++ - 转换重载函数不明确

c - ANSI C 和 C99 文字前缀和后缀列表

c - 使用 ANSI C 的匿名结构

c - 如何使用 ANSI 代码在 C 中获取光标位置

c - 强弱符号 -> double 转 char 数组

c++ - pthread.h 头文件问题

c - 简单 C 程序中的有点深奥的 gcc 错误

使用非标准头编译 C