在C中共享全局variables
我如何创build在C中共享的全局variables? 如果我把它放在一个头文件中,那么链接器会抱怨variables已经被定义了。 是唯一的方法来声明我的一个C文件中的variables,并手动把extern
的所有其他C文件的顶部想要使用它? 这听起来并不理想。
在头文件中写入extern
。 并且在其中一个c文件的全局范围内声明它,而不用extern
。
在一个头文件(shared.h)中:
extern int this_is_global;
在每个要使用此全局符号的文件中,包含包含extern声明的头文件:
#include "shared.h"
为了避免多个链接器定义, 编译单元中必须存在一个全局符号的声明 (例如:shared.cpp):
/* shared.cpp */ #include "shared.h" int this_is_global;
在头文件中
头文件
#ifndef SHAREFILE_INCLUDED #define SHAREFILE_INCLUDED #ifdef MAIN_FILE int global; #else extern int global; #endif #endif
在文件中你想让全局生效:
#define MAIN_FILE #include "share.h"
在需要extern版本的其他文件中:
#include "share.h"
你把声明放在一个头文件中,例如
extern int my_global;
在你的一个.c文件中,你可以在全局范围内定义它。
int my_global;
每个需要访问my_global
.c文件都包含带有extern
的头文件。
如果您在C和C ++之间共享代码,请记住将以下代码添加到shared.h
文件中:
#ifdef __cplusplus extern "C" { #endif extern int my_global; /* other extern declarations ... */ #ifdef __cplusplus } #endif
只有一个头文件有一个更简洁的方法,所以维护起来更简单。 在带有全局variables的头文件中,每个声明都带有一个关键字(我常用),然后在一个源文件中包含它
#define common #include "globals.h" #undef common
和其他任何这样的源文件
#define common extern #include "globals.h" #undef common
只要确保不要初始化globals.h文件中的任何variables,或者连接器仍然会抱怨,因为即使使用extern关键字,初始化variables也不会被视为外部variables。 global.h文件看起来与此类似
#pragma once common int globala; common int globalb; etc.
似乎适用于任何types的声明。 当然,不要在#define上使用common关键字。