代码之家  ›  专栏  ›  技术社区  ›  user5117637

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

  •  3
  • user5117637  · 技术社区  · 10 年前

    这是全局变量和链接属性一节中最让我困惑的部分。

      extern int g_var1;
    

    在定义外部非常量全局变量时,语句可以是这样的。我想我将在其他文件中使用该变量(通过前向声明)编写完全相同的代码。如果两个语句都相同,C++如何知道变量是在文件中声明的还是定义的?

    3 回复  |  直到 10 年前
        1
  •  2
  •   ozdm    10 年前

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

    举例来说,示例如下:

    变量.hpp

    #pragma once
    extern int g_var1;
    

    变量.cpp

    #include "variables.h"
    
    int g_var1 = 1;
    

    主.cpp

    #include "variables.h"
    #include <iostream>
    
    using namespace std;
    
    int main(){
        cout << g_var1 << endl;
    }
    
        2
  •  1
  •   jensa    10 年前

    表格的陈述

    extern int g_var1; // this is a declaration
    

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

    int g_var1; // declare and define variable
    

    你也可以定义它。您可以任意多次声明变量,但只能定义一次。因此,你可以写

    extern int g_var1;
    

    在需要使用变量的文件中。然后,在链接过程中,编译器将解析变量的定义(当然,前提是您在某个文件中给出了定义)。

        3
  •  0
  •   Nishant    10 年前

    当你说 extern int g_var1; 变量只是声明的,以后当你必须使用它时,你可以直接使用它。

    文件1.cpp:

    int g_var1;
    

    文件2.cpp:

    extern int g_var1;
    

    你不需要写 extern 每次。 虽然我建议如果必须使用全局变量,请将它们放在单独的头文件中。