确保变量声明只发生在范围块的开头

Ensure variable declaration only happen at beginning of scope block

我们最近失去了在 C 编译器上测试代码的能力,因为 C 编译器需要在作用域块的开头进行变量声明。

没过多久,源代码就开始被任何块中的任何地方的声明所侵入。这些编码风格的差异暂时没有引起注意,因为 none 我们的警告可能会发现它们。但它们对我们的可移植性目标来说非常糟糕。

我们正在努力恢复我们对具有此限制的 C 编译器进行连续测试的能力。但与此同时,我尝试找到一些可以帮助检测它的 gcc 警告标志组合。

-std=c90-pedantic 会检测到这种情况,但它们也会生成大量其他不需要的警告。例如,我想授权 // 注释样式,或枚举器列表末尾的逗号,或 (...) 可变参数宏或 long long 类型。 有时有办法关闭某些特定警告(-Wno-long-long-Wno-variadic-macros),有时我找不到任何(// 评论样式)。

启用一组警告并禁用其中的大部分警告只是为了保留相关的警告,这听起来很愚蠢。但如果这是唯一的可能性,我也无所谓。

-Wdeclaration-after-statement 是你想要的 gcc 选项。来自手册页:

Warn when a declaration is found after a statement in a block. This construct, known from C++, was introduced with ISO C99 and is by default allowed in GCC. It is not supported by ISO C90 and was not supported by GCC versions before GCC 3.0.