【发布时间】:2016-06-25 14:44:29
【问题描述】:
我是处理宏的新手,我刚刚偶然发现了一个我无法弄清楚的练习。有人可以向我解释这里发生了什么吗? 如果我编译我可以看到输出是什么,但我自己无法得到它。 提前谢谢!
#define M(varname, index) ( ( (unsigned char*) & varname )[index] )
int main(void) {
int a = 0x12345678;
printf( "%x %x\n", M(a,0), M(a,3) );
printf( "%x %x\n", M(a,1), M(a,2) );
}
【问题讨论】:
-
是文本替换:用传递的参数替换宏定义中出现的参数。
-
通过预处理器
cpp喂程序,看看替换是什么。之后就是指针算术... -
我可以解释“这里发生了什么”,但为了获得更好的答案,您能否告诉我们您期望看到的输出和实际看到的内容?