在 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 并且在主模块中它不会是外部的,因此将声明全局变量的存储。