C ++如何区分对全局变量的调用和全局变量的声明?

时间:2015-07-21 09:03:26

标签: c++ c++11 global-variables extern linkage

对于我来说,这是全局变量和链接属性部分中最令人困惑的部分。

  extern int g_var1;

在定义外部非const全局变量时,Statement可能是这样的。我想我会在其他文件中使用该变量(通过forward-declaration)完全相同。如果两个语句都相同,那么C ++如何知道变量是已声明还是已在文件中定义?

3 个答案:

答案 0 :(得分:3)

如果我正确理解你的问题,你不应该在另一个文件中写完全相同(即,你不应该在两个文件中写“extern int g_var1”)。一个好的做法是在头文件中声明一些变量global;在包含此头文件的cpp文件中进行定义。执行此操作后,您可以在包含头文件的所有文件中使用此变量。

为了说明,一个例子是这样的:

variables.hpp

#pragma once
extern int g_var1;

variables.cpp

#include "variables.h"

int g_var1 = 1;

的main.cpp

#include "variables.h"
#include <iostream>

using namespace std;

int main(){
    cout << g_var1 << endl;
}

答案 1 :(得分:2)

表格声明

extern int g_var1; // this is a declaration

是变量的声明。关键字extern确保了这一点。 如果你写

int g_var1; // declare and define variable

你也可以定义它。您可以根据需要多次声明变量,但只能定义一次。你可以写

extern int g_var1;

在那些需要使用变量的文件中。然后在链接期间,编译器将解析变量的定义(假设您在某个文件中给出了定义)。

答案 2 :(得分:1)

当您说extern int g_var1;变量刚刚被声明时,以后必须使用它时,您可以直接使用它。

file1.cpp:

int g_var1;

File2.cpp:

extern int g_var1;

您不必每次都写extern。 虽然我建议你是否必须使用全局变量将它们放在一个单独的头文件中。