如果没有在函数顶部声明变量,我想知道如何强制 gcc 使当前编译失败。
void foo() {
int bar; //Enabled
/* some code stuff */
int bar2; //Compile Error
}
我已经看到我需要使用 -pedantic
&& -ansi
进行编译。
我的项目已经是这样了,但是好像不行。
顺便说一句,我在 C89
中编译,确实需要留在那个 C 版本中。 (-ansi
)
在我看过的所有文档中,没有允许这样做的 gcc 标志。 有什么我错过的吗。
最佳答案
有一个选项可以警告在语句之后定义或声明的变量:
-
-Wdeclaration-after-statement
— 警告,除非您还设置了-Werror
(始终使用-Werror
是个好主意;您不会忘记修复警告!) -Werror=declaration-after-statement
— 即使您没有设置也会出错-Werror
这会强制在任何语句 block 的顶部定义变量(如 C90 所要求的),而不是允许在需要时声明变量(如 C99 及更高版本所允许的)。这不允许:
int function(int x)
{
int y = x + 2;
printf("x = %d, y = %d\n", x, y);
int z = y % x; // Disallowed by -Wdeclaration-after-statement
printf("z = %d\n", z);
return x + y + z;
}
据我所知,没有一个选项可以阻止您在函数内部 block 的 {
之后声明变量。
关于c - 如果变量不在函数的顶部,则禁用变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769586/