0

在编译 C++ 源代码时,我收到了以下警告。

变量“选项卡”已设置但未使用 [-Wunused-but-set-variable]

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

EX.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 编译向我显示警告

4

2 回答 2

3

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

你从来没有读过变量。一些编译器可能会尝试优化这个变量,因为它似乎没有影响任何东西。

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

如果你从某处读到它,那么味精就会消失

int a = t[n][n];

但是当然你现在会得到变量 a 的味精

于 2014-11-11T19:12:05.233 回答
1

你正在填充一个数组,但永远不要使用/读取这个数组。数组在函数结束时过期。

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

于 2014-11-11T19:22:37.693 回答