8
我有一段代码,它可以在x86 gcc 4.4.1没有问题的情况下编译,但是在blackfin gcc 4.1.2中出现许多“数字常量之前预期的非限定标识”错误。我看到有一些变量名与某些预定义的宏冲突。是否有可能在cpp文件的某一行看到定义的宏?在编译C代码的过程中可以看到已定义的宏吗?
我有一段代码,它可以在x86 gcc 4.4.1没有问题的情况下编译,但是在blackfin gcc 4.1.2中出现许多“数字常量之前预期的非限定标识”错误。我看到有一些变量名与某些预定义的宏冲突。是否有可能在cpp文件的某一行看到定义的宏?在编译C代码的过程中可以看到已定义的宏吗?
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标准输入)。