在C中定义公开变量的公认标准方法是什么?假设设置如下:
在.h
typedef struct my_struct{
...
} my_struct;
extern my_struct var1;
在.c
my_struct var1;
这是正确的用法还是编译器在这里做了不必要的工作?外界实际上在做什么?我的理解一直是默认情况下一切都已经隐含了extern。
答案 0 :(得分:2)
我的理解一直是默认情况下一切都已经隐含了extern。
但这是真的......
标题中明确extern
var1
的目的是:
var1
不是私密的。include
标头使用在其他位置声明的变量的源文件。<强>建议强>
创建getter / setter函数并将var1
设为私有(static
)。
答案 1 :(得分:2)
当涉及变量和函数时,隐式extern
部分之间存在细微差别。
如果你把
void foo(void);
<。>在.h文件中并将.h文件包含在多个.cc文件中,因为该函数未在.h文件中定义,所以没有任何危害。它只是声明了。
如果你放,
int x;
在同一个.h文件中,然后在包含.h文件的每个.c文件中定义x
。如果.h文件有:
void foo(void){}
因为这是宣言和定义。
要使x
之类的变量仅作为声明,您需要添加extern
关键字。
答案 2 :(得分:1)
这是完全正确的。您需要在标头中包含extern
,以告诉编译器存在var1
以及在编译使用它的代码时它的类型是什么。
(我假设您在多个var1
文件中使用.c
,其中一个正在定义它。如果您只在一个.c
中使用它如果在使用变量之前定义变量,则不需要在标题中声明。)