Переменная img не определена и не используется - почему это так? - PullRequest
1 голос
/ 17 марта 2020

У меня есть этот код:

int main(int argc, char *argv[])
{
    if (argc == 2)
    {
        struct ppm* img = ppm_read(argv[1]);
    }
    else
        error_exit;
    find_msg(img);
}

и по неизвестным (мне) причинам компилятор жалуется как

 warning: unused variable img   

на img в состоянии «если», и также

error: 'img' undeclared

в функции find_msg(img).

Почему?

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Как уже указывалось в комментариях, переменная img выходит из области действия } после ее определения. Он не используется, пока он определен - отсюда и предупреждение «неиспользованная переменная». Он недоступен после } - отсюда и предупреждение 'undeclared variable'.

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

int main(int argc, char *argv[])
{
    if (argc != 2)
        error_exit;

    struct ppm* img = ppm_read(argv[1]);
    find_msg(img);
}
0 голосов
/ 17 марта 2020

Вы захотите объявить объект вне оператора if, а затем присвоить ему значение внутри оператора if. Вот еще немного информации о правилах области видимости. https://www.geeksforgeeks.org/scope-rules-in-c/amp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...