如果在C结构中定义

如果在C结构中定义,c,C,如果定义了(XX),是否可以将其放置在头文件中的结构/联合中 struct { int i; #if defined(xx) int j; #endif }t; 我正在处理一个由.c和.h文件组成的大型文件库,我需要知道这种用法的可能缺点。虽然完全有效,但使用这种用法的一个明确缺点是,任何时候你需要使用t.j你也必须用#如果定义的话(xx)否则您将在完全有效的情况下调用编译器错误,使用它的一个明确的缺点是您需要使用t.j的任何时候都必须使用#如果定义了(xx)否则您将调用编译器错误当然

如果定义了(XX),是否可以将其放置在头文件中的结构/联合中

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

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

虽然完全有效,但使用这种用法的一个明确缺点是,任何时候你需要使用
t.j
你也必须用
#如果定义的话(xx)
否则您将在完全有效的情况下调用编译器错误

,使用它的一个明确的缺点是您需要使用
t.j
的任何时候都必须使用
#如果定义了(xx)
否则您将调用编译器错误

当然可以。预处理器可以用于任何事情,无需为其提供C。这种用法的缺点是,您有一个结构,它的大小取决于是否定义了xx。这是自找麻烦,因为使用此定义构建的库和使用此库而不使用此定义的人具有不同的结构…

当然可以。预处理器可以用于任何事情,无需为其提供C。这种用法的缺点是,您有一个结构,它的大小取决于是否定义了xx。这是自找麻烦,因为使用此定义构建的库和使用此库而不使用此定义的人具有不同的结构…

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

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

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

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

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

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

@一个奇怪的浏览器错误把我的编辑变成了一个新的答案post@Aniket奇怪的浏览器错误将我的编辑变成了一个新的回复帖子