0

如果定义(XX)可以放在头文件的结构/联合中吗?

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

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

4

3 回答 3

2

虽然完全有效,但使用它的一个明确的缺点是任何时候你需要使用t.j你也必须用你的包围它,#if defined(xx)否则你会调用编译器错误

于 2012-11-08T19:10:07.900 回答
1

你当然可以。预处理器可以用于任何事情,无需喂它 C。这种用法的缺点是,你有一个结构,它会根据是否定义 xx 来改变大小。这是自找麻烦,因为使用此定义构建的库和使用此库而没有定义的人具有不同的结构......

于 2012-11-08T19:11:09.553 回答
1

预处理器指令如#if可以放置在程序中的任何位置。它们与文本中出现的 C 代码(或其他任何东西)(注释除外)没有实际关系,因为它们是在编译阶段之前处理的。您可以像下面的代码那样做一些愚蠢的事情,尽管这通常是一个坏主意。

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

int bar(int x)
{
#endif
    return x;
}
于 2012-11-08T19:13:19.330 回答