相关疑难解决方法(0)

预处理器输出

在将C预处理器转换为目标文件之前,如何查看C预处理器生成的输出?

我想看看MACRO定义对我的代码做了什么.

macros gcc c-preprocessor

35
推荐指数
5
解决办法
3万
查看次数

为什么这个嵌套的宏替换失败了?

我正在尝试应用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)

c macros initialization c-preprocessor

9
推荐指数
1
解决办法
431
查看次数

奇数C函数定义不是K&R

我很久以前就遇到过一些用旧的非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样式函数声明的引用,但这似乎不是那样的?

c turbo-c

0
推荐指数
1
解决办法
151
查看次数

标签 统计

c ×2

c-preprocessor ×2

macros ×2

gcc ×1

initialization ×1

turbo-c ×1