2010-02-19 65 views

回答

11
gcc -dM -E myfile.cpp 
  • -dM开关告诉GCC转储给定文件中定义的所有宏(这将包括需要通过语言标准,以及任何额外的宏GCC定义本身被定义宏的列表)。

  • -E switch告诉GCC在预处理文件后不继续编译。

为了看到在CPP文件的给定行中定义的宏的列表,它可以更容易地第一过滤掉任何预定义的宏(由编译器定义的宏)的。在BASH中,你可以这样做:

LINE=40 
FILE=myfile.cpp 
HEADER=myfile.h 
diff <(grep -h '#include[[:space:]]*<.*>' ${FILE} ${HEADER} | gcc -dM -x c++ -E -) <(cat ${FILE} | head -n ${LINE} | gcc -x c++ -dM -E -) 

这应该过滤掉由标准系统头或框架定义的任何宏。额外的部分-x c++告诉GCC将输入解释为C++源代码[需要预处理],这是因为它不能根据文件名的扩展名来确定它(源代码通过通过GCC标准输入)。

相关问题