C pre-processor macros
我有一个关于C编程中宏的问题。我对宏的了解是,它们是预处理器指令,在编译阶段之前完成,然后被删除。所以我写了一段代码来测试这个,但是它在编译阶段之后仍然有效:
1 2 3 4 5 6 7 8 9 10 11 12 |
我不知道这段代码为什么还能工作。
因为宏做了它应该做的。预处理器占用了线路
1 | SWAP(&data1,&data2); |
换成了
1 | {int temp; temp = *data1;*data1 = *data2;*data2=temp;}; |
号
然后把它输入编译器,编译器完成了它的工作,你的程序就可以工作了。
宏是在编译之前发生的文本替换。
宏在编译后不会被删除。当处理器运行(编译前的步骤)时,它会找到所有出现的交换并替换为它们的定义,此时所有代码都会展开和编译,而不会出现重复。