C***H 发帖数: 508 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: CatOH (亲氧化猫), 信区: Programming
标 题: 这个结果是啥,为什么呢?
发信站: BBS 未名空间站 (Fri Mar 18 21:12:26 2011, 美东)
某人今天问起,C语言中,如下定义:
#define A1 NULL
#define A2 NULL
#if (A1==NULL)
#undef A1
#define A1 t1
#elif (A2==NULL)
#undef A2
#define A2 t2
#endif
#if (A1==NULL)
#undef A1
#define A1 t1
#elif (A2==NULL)
#undef A2
#define A2 t2
#endif
编译完后,A1,A2分别是啥?
以为很直接,但实际上一试,发现结果和想象的不一样,没搞明白为什么,特来此一问
... |
C***H 发帖数: 508 | 2 转到学术板问一下
【在 C***H 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: CatOH (亲氧化猫), 信区: Programming : 标 题: 这个结果是啥,为什么呢? : 发信站: BBS 未名空间站 (Fri Mar 18 21:12:26 2011, 美东) : 某人今天问起,C语言中,如下定义: : #define A1 NULL : #define A2 NULL : #if (A1==NULL) : #undef A1 : #define A1 t1
|
d********g 发帖数: 7458 | |
C***H 发帖数: 508 | 4 编译器表示压力不大,顺利输出结果,但是我confuse了
于是我被编译器玩残了
【在 d********g 的大作中提到】 : 编译器都被你玩残了
|
d********g 发帖数: 7458 | 5 结果是什么?
【在 C***H 的大作中提到】 : 编译器表示压力不大,顺利输出结果,但是我confuse了 : 于是我被编译器玩残了
|
C***H 发帖数: 508 | 6 A1是t1,A2是NULL
【在 d********g 的大作中提到】 : 结果是什么?
|
d********g 发帖数: 7458 | |
C***H 发帖数: 508 | 8 hehe,估计应该不是,大概是有些tricky的地方我不知道
【在 d********g 的大作中提到】 : 编译器把你两段当成一段了,既然长得一模一样
|
e******d 发帖数: 1077 | 9 学术版?应该去民工版问吧。
【在 C***H 的大作中提到】 : 转到学术板问一下
|
N***m 发帖数: 4460 | 10 this is what I expected. what's your expected value?
【在 C***H 的大作中提到】 : A1是t1,A2是NULL
|
C***H 发帖数: 508 | 11 我以为A2会是t2,为什么呢?
【在 N***m 的大作中提到】 : this is what I expected. what's your expected value?
|
a****s 发帖数: 559 | 12 编译器先做宏替换,用NULL替换所有的A1,A2,然后才做宏运算。 |
C***H 发帖数: 508 | |
i*****y 发帖数: 1554 | |