如何在gcc中强制执行C89样式的变量声明?

Pau*_*l R 11 c gcc c99 c89 visual-c++

我在代码库上工作,主要是带有一点点C++的C语言,并且主要使用gcc构建,但偶尔需要使用MSVC构建.微软的C编译器仍然是非常C89有一些小的扩展,它仍然不支持混合代码和变量定义点菜 C++/C99.所以我需要找到一种方法来阻止开发人员在使用gcc时编写无序代码/变量定义,否则构建随后会破坏MSVC.如果我使用gcc -std=c89那么一切都会中断,因为不允许使用C++风格的注释(可能还有其他问题,但我还没有进一步研究过).如果我使用gcc -std=gnu89那么允许无序代码/变量定义,这对我也没有帮助.有任何想法吗 ?我想我只需要类似的东西gcc -std=c99 -fno-inline-variable-definitions,如果存在这样的选择.

Don*_*ows 13

您正在使用-Wall -Wextra -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations-Wdeclaration-after-statement选项之后,如gcc警告信息页面所述.请注意,这些可能会导致系统头文件中的问题产生大量噪音,并且它们只是警告,所以您必须制定一个热衷于实现零警告构建的策略.

  • 您可以执行`-Wdeclaration-after-statement -Werror = declaration-after-statement`将其变为错误. (10认同)
  • @Paul,是的,似乎是[Bug 35058](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35058).它说它是在GCC 4.4中修复的,这就是我正在使用的.我想,直到你可以升级,你可以通过点击该警告来杀死构建. (3认同)