C 在h文件中声明的全局变量及其访问权限
只是一个简单的理解问题: 变量C 在h文件中声明的全局变量及其访问权限,c,header,extern,globals,C,Header,Extern,Globals,只是一个简单的理解问题: 变量extern int x_glob在头glob.h中声明 因此,在每个包含在glob.h中使用此变量声明的函数的c文件中,我必须像这样重新定义它: extern void func_1( void ) { int x_glob; glob_x++; return(); } 对吗 如果我在glob.h中的x_glob声明中省略了外部词,我就不需要定义了 为什么不把extern字留在头文件中呢 也许这个问题听起来很蠢——我的目标是在这个问题上建立一个更好
extern int x_glob
在头glob.h
中声明
因此,在每个包含在glob.h
中使用此变量声明的函数的c文件中,我必须像这样重新定义它:
extern void func_1( void )
{
int x_glob;
glob_x++;
return();
}
对吗
如果我在glob.h
中的x_glob
声明中省略了外部词,我就不需要定义了
为什么不把extern
字留在头文件中呢
也许这个问题听起来很蠢——我的目标是在这个问题上建立一个更好的结构
随着项目的发展,我的程序也在不断增加。不,这是错误的。使用函数中的
int x_glob
可以声明一个本地自动变量。这将覆盖任何全局变量
但在一个.c文件中,您必须声明全局变量:
// main.c
int x_glob;
这将创建一个现在可由所有模块使用的变量。变量的extern
版本仅在编译其他模块时告知编译器,在某个地方存在该变量,并且在将模块链接到可执行文件时会找到该变量
就个人而言,我更喜欢以下设置:
// glob.h
#ifndef EXTERN
#define EXTERN extern
#endif
EXTERN int x_glob;
// module.c
#include "glob.h"
// main.c
#define EXTERN
#include "glob.h"
在所有模块中,
x\u glob
将被称为extern
,而在主要模块中,它将不是extern,因此将声明全局变量的存储。“至少”->“准确”。否则,链接会因多个定义而失败。谢谢你,我的朋友-树太多了,无法看到forest@Dagute,然后单击左侧的按钮接受我的答案。很高兴能帮上忙。@paul-哪个按钮-对不起,我是新来的这个论坛现在在左边有一个上下按钮,上面写着“3”。点击“3”接受答案。这是您指出答案已解决或帮助您解决问题的方式。如果您想在代码中更好地结构化,请首先尽可能避免全局性。