确保变量声明只发生在范围块的开头
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.
我们最近失去了在 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.