#define CAST
#define A(x) (CAST(x))
#define A(x,y) (CAST((x)+(y)))
void main()
{
INT i=A(1);
INT j=A(1,2);
}
在Borland C++ ver3.1下编译
跟踪结果为i=1,j=3
像这样#define CAST的形式我以前在.h中使用,以防止头文件的重复包含
#ifdef _X
#define _X
...
#endif
我以前在想,#define CAST只不过是定义一个随机的值,具体的值有编译器指定,需要保证在所有头文件中类似的值是唯一的就行了。但是这样#define A(x) (CAST(x))实在是想不通,究竟有什么用,好像在书上也没有说过,不知那位大虾能给说明一下.
因为 #define CAST 后面没有内容,所以
#define A(x) (CAST(x))
就相当于
#define A(x) x
宏定义实际上是字符串替换,然后教给编译器处理。你的CAST为空,当然不起任何作用
xuying说得对,你这个#define CAST 实在是莫名其妙,既然是用来防止重复包含的,为什么有用来计算,
实际上
#define A(x) (CAST(x))就等于 #define A(x) x
#define A(x,y) (CAST((x)+(y)))就等于 #define A(x,y) x+y
希望我没有理解错你的意思
在 VC7 下根本无法通过编译。