我有一些使用vextern的c代码,如下所示,想知道这是什么目的:
file1.c中:
#define FILE1_G_
file1.h:
#ifdef FILE1_G_
# define vextern
#else
# define vextern extern
#endif
答案 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
标记,但可以使用它们,因为它们已在该标题中声明并在其他地方定义。