http://blog.csdn.net/dyufei/article/details/7844566
C/C++在编译的过程中,依次进行:预处理,编译,汇编,链接。宏是在预处理时展开的而 gcc 的预处理选项为-E。
所以将调用宏的那部分代码单独提取出来,然后利用gcc对其进行预处理即可看到宏展开后的代码,方便理解。
方法:
gcc -Efile_name.c
例:
//macro_test.c
#include<stdio.h>
#definePRINT_MSG(MSG) printf(#MSG" is %d\n",MSG)
#define MAX_NUM (3)
int main()
{
intx=10,y=20;
PRINT_MSG(x+y);
intg_layer[ MAX_NUM];
for(int i=0;i< MAX_NUM;i++) g_layer[i] = i;
for (int i=0;i< MAX_NUM;i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -E macro_test.c
处理后的结果:
int main()
{
int x=10,y=20;
printf("x+y"" is%d\n",x+y);
int g_layer[(3)];
for (int i=0;i<(3);i++) g_layer[i] = i;
for (int i=0;i<(3);i++)printf("[%d] =%d\n", i,g_layer[i]);
}
# gcc -std=c99macro_test.c -o macro_test.o
# ./macro_test.o
x+y is 30
[0] =0
[1] =1
[2] =2
//展开输入到文本