c - 如果变量不在函数的顶部,则禁用变量声明

标签 c function gcc compilation warnings

如果没有在函数顶部声明变量,我想知道如何强制 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/

相关文章:

c - 为什么2^63减去1000,结果是1024而不是1000?

gcc - 为什么链接库的顺序有时会导致 GCC 出错?

c++ - 使用 Cygwin + gcc 编译 Boost 示例项目

php - 这个功能有什么问题?

javascript - 如何在 Angular 2 组件中实现 js 函数

linux - 在 Ubuntu 12.04.1 下构建 cross-gcc 4.7.2

c# - pinvoke c 函数 - System.BadImageFormatException

c - 在 C 中读取文件时,如何防止任何其他进程写入文件?

c - 写入文件的函数在 .cpp 文件中有效,但在 .h 文件中无效

php - 如何获取 PHP 核心函数列表以便编写函数包装器