编译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告诉我警告
答案 0 :(得分:3)
我假设你的底部t [n] [n]确实是tab [n] [n]
你永远不会读取变量。某些编译器可能会尝试优化此变量,因为它似乎不会影响任何内容。
如果变量处于全局范围,那么编译器很难确定它是否在其他地方使用,因此它不会抱怨。
如果你从某个地方读取它,那么msg就会消失
int a = t[n][n];
但是你当然会得到变量a的msg
答案 1 :(得分:1)
您正在填充数组,但从不使用/读取此数组。 数组在函数结束时到期。
当它是全局的时,编译器会假设你要在其他地方访问这个数组。 所以它不会抱怨。