多个文件中的全局变量

kay*_*kun 66 c++

我有两个需要访问公共变量的源文件.做这个的最好方式是什么?例如:

source1.cpp:

int global;

int function();

int main()
{
    global=42;
    function();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

source2.cpp:

int function()
{
    if(global==42)
        return 42;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

变量global的声明是静态的,extern还是应该在两个文件包含的头文件中?

e.J*_*mes 101

全局变量应extern在两个源文件包含的头文件中声明,然后仅在其中一个源文件中定义:

COMMON.H

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

source1.cpp

#include "common.h"

int global;

int function(); 

int main()
{
    global=42;
    function();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

source2.cpp

#include "common.h"

int function()
{
    if(global==42)
        return 42;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您想了解更多信息和解释背后:http://stackoverflow.com/a/10422050/1218075 (3认同)

har*_*per 14

您添加了一个"头文件",它描述了模块source1.cpp的接口:

source1.h

#ifndef SOURCE1_H_
#define SOURCE1_H_

extern int global;

#endif
Run Code Online (Sandbox Code Playgroud)

source2.h

#ifndef SOURCE2_H_
#define SOURCE2_H_

int function();

#endif
Run Code Online (Sandbox Code Playgroud)

并在每个使用此变量的文件中添加#include语句,并在(重要)中定义变量.

source1.cpp

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

int global;     

int main()     
{     
    global=42;     
    function();     
    return 0;     
}
Run Code Online (Sandbox Code Playgroud)

source2.cpp

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

int function()            
{            
    if(global==42)            
        return 42;            
    return 0;            
}
Run Code Online (Sandbox Code Playgroud)

虽然没有必要,但我建议使用文件名source1.h来表明它描述了模块source1.cpp的公共接口.同样,source2.h描述了source2.cpp中的公共可用内容.