GCC编译器为定义和使用的静态变量发出警告

nit*_*ian 0 c++ gcc static-variables compiler-warnings

请考虑以下示例代码:

File1.cpp

#include <iostream>

static int x = 6;                          // line 3

int main()
{
   int x = 10;                             // line 7
   {
      extern int x;                        // line 9
      x = x + 5;
      std::cout << "x = " << x << "\n";
   }
}
Run Code Online (Sandbox Code Playgroud)

由于外部声明x,将访问静态变量x而不是自动变量x.但我得到以下编译器警告:

File1.cpp:5:警告:'x'已定义但未使用

即使有了这个警告,我也得到了预期的输出x = 11,即5增加到静态变量的值x.

为什么编译器会给出上述警告?我正在使用GCC版本g++ (GCC) 3.4.6

Ant*_*hys 5

注意:如果您对所有行编号,那会更容易.

您正在使用未正确处理extern的旧版GCC.如果您使用的是现代版本,则会看到代码存在三个问题.

首先,不使用main()中的本地x(警告).其次,不使用静态全局x(警告).第三,未定义外部x(错误).

您不应该声明全局x静态,或者您应该使用:: x而不是extern规范.