C中共享的全局变量

Cla*_*diu 80 c variables linker scope global-variables

如何创建在C中共享的全局变量?如果我将它放在头文件中,那么链接器会抱怨已经定义了变量.是在我的一个C文件中声明变量并手动将externs放在要使用它的所有其他C文件的顶部的唯一方法吗?这听起来并不理想.

Her*_*nán 90

在一个头文件(shared.h)中:

extern int this_is_global;
Run Code Online (Sandbox Code Playgroud)

在要使用此全局符号的每个文件中,包含包含extern声明的标头:

#include "shared.h"
Run Code Online (Sandbox Code Playgroud)

要避免多个链接器定义,只需在编译单元中存在一个全局符号声明(例如:shared.cpp):

/* shared.cpp */
#include "shared.h"
int this_is_global;
Run Code Online (Sandbox Code Playgroud)

  • 请更多地强调"只有一个你的全球符号宣言......"那种绊倒了.我有关于我想要使用全局变量的所有c文件的声明:( (6认同)

DiG*_*GMi 59

在头文件中写入extern.并且在其中一个c文件的全局范围内声明它没有extern.


jim*_*ara 22

在头文件中

头文件

#ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef  MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

在包含您希望全局生存的文件的文件中:

#define MAIN_FILE
#include "share.h"
Run Code Online (Sandbox Code Playgroud)

在需要extern版本的其他文件中:

#include "share.h"
Run Code Online (Sandbox Code Playgroud)


nos*_*nos 15

您将声明放在头文件中,例如

 extern int my_global;
Run Code Online (Sandbox Code Playgroud)

在您的一个.c文件中,您可以在全局范围内定义它.

int my_global;
Run Code Online (Sandbox Code Playgroud)

每个要访问的.c文件都my_global包含带有externin 的头文件.


小智 5

如果您在 C 和 C++ 之间共享代码,请记住将以下内容添加到shared.h文件中:

#ifdef __cplusplus
extern "C" {
#endif

extern int my_global;
/* other extern declarations ... */

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)