303、当宏ONE:a. 被定义时;b. 未被定义时,以下程序的输出分别是什么?请解释原因。#include #define ONE 1 #define myprintf(a) printf(“x” #a ” = %d\n”, x##a) int main(void) { #ifdef ONE #define TWO ONE+ONE #else #define ONE 2 #define TWO (ONE+ONE) #endif int x1 = 3 (ONE+ONE), x2 = 3 TWO; myprintf(1); myprintf(2); return 0; }
-
a. 当宏
ONE被定义时,ONE为1,TWO为ONE+ONE即1+1。
x1 = 3*(1 + 1) = 6,
x2 = 3*1 + 1 = 4(这里要注意宏替换后是3*1+1,按照运算符优先级先乘后加)。
程序输出:
x1 = 6 x2 = 4 -
b. 当宏
ONE未被定义时,ONE被重新定义为2,TWO为(ONE + ONE)即(2 + 2)。
x1 = 3*(2 + 2) = 12,
x2 = 3*(2 + 2) = 12。
程序输出:
x1 = 12 x2 = 12

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



