【问题标题】:-Wunused-variable compiler says ERROR-Wunused-variable 编译器说 ERROR
【发布时间】:2013-11-03 07:14:15
【问题描述】:

最近我开始用 C++ 编程(我来自 Java,这花了我一点改变哈哈)。在 Windows 下一切正常。问题是我切换到 Linux,这就是编译器出现问题的地方。通常,当您声明一个变量但未使用时,编译器会显示一个“警告”,说明该变量未使用,但我(在 linuxmint 15 下)将我抛出为“错误”并且没有编译:C. I do不知道是否有人发生过这种情况,但是我在制作大型程序(不止一堂课)时生病了。

一个小例子:

【问题讨论】:

  • 显示你的编译命令(编译器是g++)。它有-Werror 吗? (你肯定至少想要-Wall);您的图片显示了一些 IDE,而不是编译器(始终是命令行)。
  • 是的,我正在使用 code::blocks 有一个编译捕获 img
  • 那不是编译器,而是IDE。您应该在命令行上编译(稍后,配置您的 IDE 以便它运行所需的命令)。你的照片显示了一个警告。显然是 IDE 将其处理为一些错误(可能是因为西班牙语设置?)。尝试在命令行的终端中编译(使用以g++ -Wall 开头的命令,或者可能使用make
  • 有一个screenshoot。在命令行上没有错误那么我猜问题是IDE(?)。我需要更改 SP lang 的任何设置吗? :O
  • 还是养成在命令行编译的好习惯。你考虑过emacs吗?顺便说一句,如果可能的话,请在您的问题中放入带有您的代码和命令的段落(而不是作为其他地方的链接)!了解如何在 StackOverflow 上正确设置问题和答案的格式! BTW IDE 表示Integrated Development Environment

标签: c++ linux compiler-errors compiler-warnings


【解决方案1】:

未使用的变量警告是使用任一调用 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”是一个未使用的变量,以帮助检测您修改了错误的变量。

【讨论】:

  • 我明白,但是在 Windows 上,当我有一个未使用的变量时,编译器会说“警告”,并且无论如何都会编译。但在 Linux 上显示“错误”Windows:0 个错误,1 个警告(0 分钟,0 秒) Linux:1 个错误,0 个警告(0 分钟,0 秒)
  • 因为您正在使用 -Werror 进行编译,因为检查了任何复选框代码块用于“将警告视为错误”的任何复选框。
  • 不,g++ 正在给你一个警告(除非你通过它-Werror)。是你的 IDE 弄错了。所以避免使用它。并且至少对于堆栈溢出,不要用西班牙语配置您的系统。在你的 shell 环境中使用LANG=C LC_ALL=C
猜你喜欢
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多