这段代码中vextern的用途是什么?

时间:2012-02-15 20:41:05

标签: c linux gcc

我有一些使用vextern的c代码,如下所示,想知道这是什么目的:

file1.c中:

#define FILE1_G_

file1.h:

#ifdef FILE1_G_
# define vextern
#else
# define vextern extern
#endif

2 个答案:

答案 0 :(得分:5)

我想define仅用于在一个文件中定义变量,但在包含此标题的所有文件中声明它们。

如果在file1.h中,您有vextern int a;,并且您将此文件包含在某些.c文件中,则变量a将仅在包含{{1}行的文件中定义1}}。 (在您的示例中,#define FILE1_G_

答案 1 :(得分:2)

这是一个preprocessor macro

如果定义了FILE1_G_,那么vextern的所有出现都会被extern替换。如果没有,那么他们就会被删除(没有替换)

根据以下评论进行修改以澄清:

这意味着它要么声明为extern,要么声明为vextern;只有单词.c受到影响。

对于用例...它允许vextern文件通过在包含该标头之前定义FILE1_G_来定义FILE1_G_“标记”的内容。

默认值(.c未定义)表示当前包含file1.h的{​​{1}}文件未定义FILE1_G_,并且未定义用vextern标记,但可以使用它们,因为它们已在该标题中声明并在其他地方定义。