GCC警告“设置但未使用”

时间:2014-11-11 19:08:55

标签: c++ g++4.8

编译C ++源代码时,我一直收到警告。

  

变量'tab'设置但未使用[-Wunused-but-set-variable]

我有一段代码:编译显示上面提到的警告,请建议我为什么编译显示警告。当我运行程序时,我得到:分段错误(核心转储)

实施例1,

const int n = 10000;
int main() {
    char tab[n][n];
    for(int x = 0; x < n; x++)
        for(int y = 0; y < n; y++)
            tab[x][y] = x + y;

但如果我使用全局变量,我的程序运行良好。

例2

const int n = 10000;
char tab[n][n];
int main() {
    for(int x = 0; x < n; x++)
        for(int y = 0; y < n; y++)
            tab[x][y] = x + y;

再次请建议我为什么编译使用Ex.1告诉我警告

2 个答案:

答案 0 :(得分:3)

我假设你的底部t [n] [n]确实是tab [n] [n]

你永远不会读取变量。某些编译器可能会尝试优化此变量,因为它似乎不会影响任何内容。

如果变量处于全局范围,那么编译器很难确定它是否在其他地方使用,因此它不会抱怨。

如果你从某个地方读取它,那么msg就会消失

int a = t[n][n];

但是你当然会得到变量a的msg

答案 1 :(得分:1)

您正在填充数组,但从不使用/读取此数组。 数组在函数结束时到期。

当它是全局的时,编译器会假设你要在其他地方访问这个数组。 所以它不会抱怨。