📜  C |宏和预处理器|问题1

📅  最后修改于: 2021-05-29 12:48:01             🧑  作者: Mango

#include 
#define PRINT(i, limit) do \
                        { \
                            if (i++ < limit) \
                            { \
                                printf("GeeksQuiz\n"); \
                                continue; \
                            } \
                        }while(1)
  
int main()
{
    PRINT(0, 3);
    return 0;
}

在上面的程序中, GeeksQuiz被打印了多少次?
(A) 1
(B) 3
(C) 4
(D)编译时错误答案: (D)
说明: PRINT宏在预处理器时间即编译时间之前被扩展。宏扩展后,if表达式变为: if(0 ++ <3) 。由于0是一个常数,并且仅表示r值,因此应用增量运算符将产生编译时错误:需要lvalue。左值表示具有某个地址的内存位置。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。