最近我开始用C++编程(我来自Java,这花了我一点点改变哈哈)。在 Windows 下一切正常。问题是我切换到 Linux,这就是编译器出现问题的地方。通常当您声明一个变量但未使用时,编译器会显示一个“警告”,说明该变量未使用,但我(在 linuxmint 15 下)将我抛出为“错误”并且没有编译:C. 我做不知道是否有人发生过这种情况,但是我在制作大型程序(不止一堂课)时生病了。
一个小例子:
最近我开始用C++编程(我来自Java,这花了我一点点改变哈哈)。在 Windows 下一切正常。问题是我切换到 Linux,这就是编译器出现问题的地方。通常当您声明一个变量但未使用时,编译器会显示一个“警告”,说明该变量未使用,但我(在 linuxmint 15 下)将我抛出为“错误”并且没有编译:C. 我做不知道是否有人发生过这种情况,但是我在制作大型程序(不止一堂课)时生病了。
一个小例子:
未使用的变量警告是调用 GCC 的结果
g++ -Wunused-variable ...
如果是这种情况,请不要指定该参数。或者是因为 -Wall:
g++ -Wall ...
在这种情况下,指定 -Wno-unused-variable
它被作为错误抛出,因为您也有“-Werror”参数。
这个警告有几个原因:在 C++ 中,可以在作用域之间“隐藏”变量,因此未使用变量的常见原因是当您有两个同名变量时。
int i = 5;
for (int i = 0; i < 10; ++i) { // << this is SECOND variable called i that hides the previous
}
if (day == "Monday") {
int i; // << you can't see the second i here, this is a third that also hides the first.
...
}
// std::cout << "i = " << i << std::endl; // we can see original i again here
这里有两个变量称为“i”。如果取消注释最后一行,它将打印 5,与称为“i”的两个附加变量无关。
但是,如果没有 std::cout,则永远不会使用原始的外部 i。也许最后一个“int i”是一个错误。
另一个常见问题与在 C++ 中具有全局变量的能力有关
int Whoops; // GLOBAL: NEVER EVER TOUCH THIS.
int func() {
int whoops; // LOCAL: ALWAYS TOUCH THIS.
Whoops = 42; // >W<hoops!
}
您会收到一条警告,“whoops”是一个未使用的变量,以帮助检测您修改了错误的变量。