多个文件中的全局变量

时间:2010-09-02 14:12:02

标签: c++

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

source1.cpp:

int global;

int function();

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

source2.cpp:

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

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

3 个答案:

答案 0 :(得分:96)

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

  

<强> 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;
}

答案 1 :(得分:14)

添加“头文件”,描述模块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

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

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;            
}

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

答案 2 :(得分:1)

在一个文件中,您将其声明为source1.cpp,在第二个文件中将其声明为

extern int global;

当然,你真的不想这样做,应该发布一个关于你想要达到的目标的问题,这样的人可以给你其他方法来实现它。