Рубрики

C | Макро и препроцессор | Вопрос 1

#include <stdio.h>
#define PRINT(i, limit) do \

                        { \

                            if (i++ < limit) \

                            { \

                                printf("GeeksQuiz\n"); \

                                continue; \

                            } \

                        }while(1)

  

int main()

{

    PRINT(0, 3);

    return 0;

}

Сколько раз GeeksQuiz печатается в вышеуказанной программе?
(А) 1
(Б) 3
(С) 4
(D) Ошибка времени компиляции

Ответ: (Д)
Объяснение: Макрос PRINT раскрывается во время предварительной обработки, т.е. до времени компиляции. После раскрытия макроса выражение if становится: if (0 ++ <3) . Поскольку 0 является постоянной величиной и представляет только r-значение, применение оператора приращения дает ошибку времени компиляции: требуется lvalue. lvalue означает ячейку памяти с некоторым адресом.

Рекомендуемые посты:

C | Макро и препроцессор | Вопрос 1

0.00 (0%) 0 votes