海湾合作委员会警告"set but not used "

GCC warning "set but not used "

本文关键字:set but not used 警告 委员会      更新时间:2023-10-16

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

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

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

例如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 编译show me警告

I假设您的底部t[n][n]实际上是tab[n][n]

您从未读取过变量。某些编译器可能会尝试优化这个变量,因为它似乎不会影响任何东西。

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

如果你在某个地方读到它,那么消息就会消失

int a = t[n][n];

但是,您当然会得到变量a的消息,现在

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

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