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