Я получаю следующее предупреждение при компиляции исходного кода 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;
Но если я использую глобальную переменную, моя программа будет работать нормально.
EX.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
Предположим, что ваш нижний t [n] [n] действительно является вкладкой [n] [n]
Вы никогда не читаете переменную. Некоторый компилятор может попытаться оптимизировать эту переменную, поскольку она, похоже, ничего не влияет.
Если переменная находится в глобальной области, то компилятору сложнее определить, используется ли она где-то в другом месте или нет, поэтому она не жалуется.
если вы прочитаете его где-нибудь, тогда сообщение исчезнет
int a = t[n][n];
Но, конечно, вы получите сообщение msg для переменной now
tab
можно ссылаться в другом TU.
вы заполняете массив, но никогда не используете/не читаете этот массив. массив истекает в конце функции.
когда он является глобальным, компилятор предположил, что вы собираетесь получить доступ к этому массиву где-то еще. поэтому он не жалуется.