如果定义(XX)可以放在头文件中的struct / union中吗?
struct
{
int i;
#if defined(xx)
int j;
#endif
}t;
我正在处理.c和.h文件的大型文件库,我需要知道这种用法的可能缺点。
答案 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;
}