在编译C代码的过程中,我可以看到已定义的宏吗?

在编译C代码的过程中,我可以看到已定义的宏吗?,c,gcc,macros,c-preprocessor,C,Gcc,Macros,C Preprocessor,我有一段代码,它在编译x86 gcc 4.4.1时没有问题,但在blackfin gcc 4.1.2时失败,出现了许多“在数值常量之前预期的非限定id”错误。我看到有些变量名与一些预定义的宏冲突。是否可以在cpp文件的某一行看到已定义的宏 gcc -dM -E myfile.cpp -dM开关告诉GCC转储给定文件中定义的所有宏(它将包括语言标准需要定义的宏列表以及GCC定义的任何其他宏) -E开关告诉GCC在预处理文件后不要继续编译 为了查看在cpp文件的给定行定义的宏列表,可能更容易首

我有一段代码,它在编译x86 gcc 4.4.1时没有问题,但在blackfin gcc 4.1.2时失败,出现了许多“在数值常量之前预期的非限定id”错误。我看到有些变量名与一些预定义的宏冲突。是否可以在cpp文件的某一行看到已定义的宏

gcc -dM -E myfile.cpp
  • -dM
    开关告诉GCC转储给定文件中定义的所有宏(它将包括语言标准需要定义的宏列表以及GCC定义的任何其他宏)

  • -E
    开关告诉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 -)
LINE=40
FILE=myfile.cpp
HEADER=myfile.h
差异