在将C预处理器转换为目标文件之前,如何查看C预处理器生成的输出?
我想看看MACRO定义对我的代码做了什么.
我正在尝试应用X宏概念,以便有可能将所有struct成员初始化为自定义默认(无效)值.我写下面的代码:
#define LIST_OF_STRUCT_MEMBERS_foo \
X(a) \
X(b) \
X(c)
#define X(name) int name;
struct foo {
LIST_OF_STRUCT_MEMBERS_foo
};
#undef X
#define X(name) -1,
static inline void foo_invalidate(struct foo* in) {
*in = (struct foo){
LIST_OF_STRUCT_MEMBERS_foo
};
}
#undef X
#define X(name) -1,
#define foo_DEFAULT_VALUE { LIST_OF_STRUCT_MEMBERS_foo }
#undef X
static struct foo test = foo_DEFAULT_VALUE;
Run Code Online (Sandbox Code Playgroud)
但是,当我运行预处理器时,定义foo_DEFAULT_VALUE无法替换X(name)调用-1,
预处理器输出:
struct foo {
int a; int b; int c;
};
static inline void foo_invalidate(struct foo* in) …Run Code Online (Sandbox Code Playgroud) 我很久以前就遇到过一些用旧的非ansi C编写的旧代码,我试图了解函数定义.
我可以理解最终结果,但我想完全理解代码风格..
使用:
ok = ElementFn(lifestyleRollupContribution)( gr, nr, cnt, id, prj, k, f, rnd, base );
Run Code Online (Sandbox Code Playgroud)
功能定义:
Private Logical ElementFn(lifestyleRollupContribution)
(
Real* gross,
Real* net,
Const Real* contribution,
Const Date* investment,
Const Date* projection,
Const PCode* key,
Const PCode* fund,
Const PCode* inv_prd_round,
Const Date* inv_prd_base_date
)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我可以看到一个名为ElementFN的函数,它返回一个"逻辑"并且有许多参数.我没有得到的是什么(lifestyleRollupContribution)它只在你看到它的地方使用了两次......但是它在做什么?它表示什么 - 我不认识.我见过对Kernighan和Ritchie样式函数声明的引用,但这似乎不是那样的?