【问题标题】:Globals declared in h file and access to them在 h 文件中声明的全局变量并访问它们
【发布时间】:2018-04-04 23:02:22
【问题描述】:

只是一个简单的理解问题:

变量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这个词呢?

也许这个问题听起来很愚蠢——我的目标是让结构更好 随着项目的发展,我的编程。

【问题讨论】:

  • 如果您希望代码结构更好,首先要尽可能避免使用全局变量。

标签: c header extern globals


【解决方案1】:

不,这是错误的。在函数中使用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,在 main 中它不会是 extern,因此将声明全局变量的存储。

【讨论】:

  • “至少”->“完全”。否则,多个定义的链接应该会失败。
  • 谢谢你,我的朋友——树太多了,看不到森林
  • @Dagute,然后点击左边的按钮接受我的回答。很高兴能帮上忙。
  • @paul - 哪个按钮 - 抱歉,我是这个论坛的新手
  • 现在在左侧显示“3”并带有向上和向下按钮。点击“3”接受答案。这就是您表明答案已解决或帮助您解决问题的方式。
猜你喜欢
  • 2016-05-16
  • 2020-01-15
  • 2014-06-07
  • 1970-01-01
  • 2020-11-01
  • 2021-12-28
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多