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
注意:如果您对所有行编号,那会更容易.
您正在使用未正确处理extern的旧版GCC.如果您使用的是现代版本,则会看到代码存在三个问题.
首先,不使用main()中的本地x(警告).其次,不使用静态全局x(警告).第三,未定义外部x(错误).
您不应该声明全局x静态,或者您应该使用:: x而不是extern规范.
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |