gcc -E -P

文件1"header1.h",內容如下:

#define A1 10
#define A2 0x0A
#define A3 (A1+1)

文件2"header2.h",內容如下:

#include "header1.h"
typedef struct st_Shit
{
  int  m1[A1];
  int  m2[A2];
  char m3[A3];
}t_Shit;

使用如下命令:

gcc -E -P  -< header2.h > shit.h
header2.h中的宏展開之後,生成shit.h文件,內容如下:
typedef struct st_Shit
{
 int  m1[10 ];
 int  m2[0x0A ];
 char m3[(10 +1) ];
}t_Shit;

如果不使用-P開關,命令如下:

gcc -E -< header2.h > shit.h
header2.h中的宏展開之後,生成shit.h文件,內容如下:
# 1 ""
# 1 "header1.h" 1
# 1 "" 2
typedef struct st_Shit
{
 int  m1[10 ];
 int  m2[0x0A ];
 char m3[(10 +1) ];
}t_Shit;

可見,-P選項能夠屏蔽掉這些垃圾內容


书籍推荐