如果在C struct中定义

时间:2012-11-08 19:07:58

标签: c

如果定义(XX)可以放在头文件中的struct / union中吗?

struct
{
 int i;
 #if defined(xx)
 int j;
 #endif
}t;

我正在处理.c和.h文件的大型文件库,我需要知道这种用法的可能缺点。

3 个答案:

答案 0 :(得分:2)

虽然完全有效,但只要您需要使用t.j,您就必须使用#if defined(xx)将其包围,否则您将调用编译器错误

答案 1 :(得分:1)

当然可以。预处理器可以用于任何事情,不需要为它提供C.这个用法的缺点是,你有一个结构,根据定义或不定义xx来改变大小。这是一个问题,因为使用此定义构建的库和使用此库而没有定义的人有不同的结构....

答案 2 :(得分:1)

预处理程序指令(例如#if)可以放在程序的任何位置。它们与文本中存在的C代码(或其他任何内容)没有实际关系(注释除外),因为它们是在编译阶段之前处理的。你可以做下面代码这样的愚蠢的事情,虽然这通常是个坏主意。

int foo(int x)
{
#if defined MONKEY
    return 0;
}

int bar(int x)
{
#endif
    return x;
}