多文件中的全局变量

我有两个源文件需要访问一个公共变量。最好的方法是什么?例如:

来源1.cpp:

int global;


int function();


int main()
{
global=42;
function();
return 0;
}

来源2.cpp:

int function()
{
if(global==42)
return 42;
return 0;
}

全局变量的声明应该是静态的、外部的,还是应该在两个文件都包含的头文件中,等等?

117824 次浏览

In one file you declare it as in source1.cpp, in the second you declare it as

extern int global;

Of course you really don't want to be doing this and should probably post a question about what you are trying to achieve so people here can give you other ways of achieving it.

The global variable should be declared extern in a header file included by both source files, and then defined in only one of those source files:

common.h

extern int global;

source1.cpp

#include "common.h"


int global;


int function();


int main()
{
global=42;
function();
return 0;
}

source2.cpp

#include "common.h"


int function()
{
if(global==42)
return 42;
return 0;
}

You add a "header file", that describes the interface to module source1.cpp:

source1.h

#ifndef SOURCE1_H_
#define SOURCE1_H_


extern int global;


#endif

source2.h

#ifndef SOURCE2_H_
#define SOURCE2_H_


int function();


#endif

and add an #include statement in each file, that uses this variable, and (important) that defines the variable.

source1.cpp

#include "source1.h"
#include "source2.h"


int global;


int main()
{
global=42;
function();
return 0;
}

source2.cpp

#include "source1.h"
#include "source2.h"


int function()
{
if(global==42)
return 42;
return 0;
}

While it is not necessary, I suggest the name source1.h for the file to show that it describes the public interface to the module source1.cpp. In the same way source2.h describes what is public available in source2.cpp.