在 h 文件中声明的全局变量和对它们的访问
Globals declared in h file and access to them
只是一个简单的问题来理解:
变量 extern int x_glob
在 header glob.h
中声明。
所以在每个包含在 glob.h
中使用此变量声明的函数的 c 文件中,我必须像这样重新定义它:
extern void func_1( void )
{
int x_glob;
glob_x++;
return();
}
对吗?
如果我在 glob.h
中的 x_glob
声明中省略了 extern 词,则不需要定义。
为什么不在 header 文件中留下 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_glob
将被称为 extern
并且在主模块中它不会是外部的,因此将声明全局变量的存储。
只是一个简单的问题来理解:
变量 extern int x_glob
在 header glob.h
中声明。
所以在每个包含在 glob.h
中使用此变量声明的函数的 c 文件中,我必须像这样重新定义它:
extern void func_1( void )
{
int x_glob;
glob_x++;
return();
}
对吗?
如果我在 glob.h
中的 x_glob
声明中省略了 extern 词,则不需要定义。
为什么不在 header 文件中留下 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_glob
将被称为 extern
并且在主模块中它不会是外部的,因此将声明全局变量的存储。