代码之家  ›  专栏  ›  技术社区  ›  Sam Becker

在C++中使用相同的变量跨多个文件

  •  7
  • Sam Becker  · 技术社区  · 16 年前

    在修改一些代码的过程中,我将一些函数分解成多个文件。我有档案 controls.cpp 和 display.cpp 我希望能够访问两个文件中的同一组变量。我不介意它们在哪里初始化或声明,只要两个文件中的函数都可以使用它们。

    当函数在同一个文件中时,这并不是一个问题,但现在在google和尝试各种事情一个小时后,这几乎是不可能的。

    5 回复  |  直到 14 年前
        1
  •  17
  •   codaddict    16 年前

    在一个文件中定义变量,如下所示:

    type var_name;
    

    并在另一个文件中声明为全局的,如:

    extern type var_name;
    
        2
  •  7
  •   Mihir Mehta    16 年前

    extern 即

    extern int i;
    

    在另一个文件中声明与普通全局变量相同的。。。

    int i;//global
    
        3
  •  4
  •   quamrana Ryuzaki L    16 年前

    创建两个新文件:

    1. 像这样的 Globals.h 并声明所有变量,如: extern type name;
      • 顺便说一句,记得包括警卫。
    2. 像这样的 Globals.cpp 并声明如下变量: type name;

    然后添加 #include "Globals.h"

    • 全局.cpp
    • controls.cpp
    • display.cpp

        4
  •  2
  •   BrainSlugs83    15 年前

    实际上,您所要做的就是在一个代码文件中声明变量一次,然后在其他代码文件中声明为extern(确保在声明它extern时不要初始化它,否则某些编译器将忽略extern关键字,从而导致编译器错误)

    #pragma once
    
    #ifdef __MAIN__
        #define __EXTERN(type, name, value)     type name = value
    #else
        #define __EXTERN(type, name, value)     extern type name;
    #endif
    

    然后在相同的头文件中声明变量,如下所示:

    __EXTERN(volatile int,  MyVolatileInteger,  0);
    

    从项目中的任何一个文件中,包括头文件,如下所示:

    #define __MAIN__
    #include "Globals.h"
    

    从所有其他内容中,只需简单地将其包括在内,如:

    #include "Globals.h"
    

    普雷斯托,你完了。变量只声明一次,并在线初始化。这是非常可维护的,并为您省去了两次声明所有内容的麻烦。

        5
  •  -1
  •   simong    16 年前

    这比extern好得多,它本质上隐藏了您共享声明的意图。