我有两个需要访问公共变量的源文件。做这个的最好方式是什么? 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还是应该在两个文件包含的头文件中?
答案 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;
当然,你真的不想这样做,应该发布一个关于你想要达到的目标的问题,这样的人可以给你其他方法来实现它。