如果我通过-E
或-save-temps
命令行参数,GCC可以输出经过完全预处理的C ++源文件。
我的问题是,我能以某种方式获得其中部分预处理的C ++源文件
a)消除了不满足#if,#ifdef和#ifndef条件的代码片段,
b)#include指令已解析(包括头文件),等等
但是
c)无法解析普通的#define指令?
(这将是必要的,而且真的很有帮助,因为我希望获得尽可能紧凑和可读的输出。 解决#if指令会缩短源代码,但是解决#define指令会使源代码的可读性降低,并且冗余度更高。)
我试图创建一个尽可能紧凑的示例,以演示我想要实现的目标:
输入文件示例:
// header1.h
#ifndef header1_h
#define header1_h
int function1(int val) {
return val + MYCONST;
}
#endif
// header2.h
#ifndef header2_h
#define header2_h
int function1(int val) {
return val + val + MYCONST;
}
#endif
// main.c
#define MYCONST 1234
#define SETTING1
#ifdef SETTING1
#include "header1.h"
#endif
#ifdef SETTING2
#include "header2.h"
#endif
int main(void) {
int retVal = function1(99);
}
预期输出:
// main.i (GCC preprocessing output)
#define MYCONST 1234 // I would like to see the definition of MYCONST here
#define SETTING1
#define header1_h
int function1(int val) {
return val + MYCONST; // I would like to see MYCONST here instead of the resolved value
}
int main(void) {
int retVal = function1(99);
}