c/c++宏定义问题,请教高手

#define CASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1];加粗部分是什么意思,dummy 在这里在里是不是指一个结构的名称,## 在这里又指什么,或起什么作用?name 和 〔〕 之间有空格,说明name不是一个数组,那么[ ]的作用又是什么?请高手回答一下,谢谢

宏名称为CASSERT,exp和name是宏参数~
这个宏是用于对某个东西进行判断,而这个判断是在编译时刻产生的,如果为false,则编译不通过。
其中dummy##name的作用是把参数name和dummy连接起来,
exp则是一个值为真/假的表达式,当exp为false的时候,就相当于
typedef int dummyname [-1],这样编译就不通过了。

比如某个mfc程序,CASSERT( WINVER >= 0x502, windows_version ),则windows版本为2003或以上的版本编译才能通过,又或者用来判断int的长度是4或者8...等等,都可以。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-06
dummy不是结构名字,dummy##name 是由typedef定义的int别名。
看不到你加粗的部分。
##的作用是将其前后两个字符串连接起来当成一个字符串。
[(exp) ? 1 : -1]这部分不明白
相似回答