MACRO выполнение шагов в C - PullRequest
0 голосов
/ 11 декабря 2018

Я написал следующий код для проверки функций MACRO:

#define err_exit(a, b) {fprintf(stdout,"%s\n",(a)); return (b); }

int func1(int a){
    if(a<50)
        err_exit("less than 50", a);
    if(a>50)
        err_exit("greater than 50", a);

    return 0;
}

int main() {
    fprintf(stdout, "\npop\n%d\n",func1(30));
    return 0;
}

И вывод:

less than 50

pop
30

Но я ожидал этого вывода:

pop
less than 50
30

Почему текст появляется перед pop?после этого вызывается функция func1()!

Как макрос заменяет инструкции в основном коде?

1 Ответ

0 голосов
/ 11 декабря 2018

Сначала вызывается func1(30), чтобы его можно было выполнить и получить результат.fprint() в main() нужен этот результат, чтобы он мог печатать свои вещи.

По мере выполнения func1(30) выполняется fprintf() макроса, и получается «менее 50»распечатаны.Теперь доступен результат func1(30).

fprint() из main() теперь можно продолжить печать (поскольку он имеет все, что нужно (то есть результат func1(30)).

Будет напечатано «pop», а затем «30», как и ожидалось.

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