GCC предупреждение «установлено, но не используется»

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;

Но если я использую глобальную переменную, моя программа будет работать нормально.

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

  • 4
    Ну ... это не используется ... это не вкладка
  • 0
    Я думаю, что он хотел спросить, почему EX 2 не показывает то же самое предупреждение
Показать ещё 1 комментарий
Теги:
g++4.8

2 ответа

3
Лучший ответ

Предположим, что ваш нижний t [n] [n] действительно является вкладкой [n] [n]

Вы никогда не читаете переменную. Некоторый компилятор может попытаться оптимизировать эту переменную, поскольку она, похоже, ничего не влияет.

Если переменная находится в глобальной области, то компилятору сложнее определить, используется ли она где-то в другом месте или нет, поэтому она не жалуется.

если вы прочитаете его где-нибудь, тогда сообщение исчезнет

int a = t[n][n];

Но, конечно, вы получите сообщение msg для переменной now

  • 0
    «[...] компилятору труднее угадать [...]»: он вообще не может угадать, так как на tab можно ссылаться в другом TU.
  • 0
    Я отредактировал догадку, чтобы определить =)
1

вы заполняете массив, но никогда не используете/не читаете этот массив. массив истекает в конце функции.

когда он является глобальным, компилятор предположил, что вы собираетесь получить доступ к этому массиву где-то еще. поэтому он не жалуется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню