操作全局静态变量

时间:2019-01-20 11:21:52

标签: c++ variables static global-variables

假设我有main.cppfile.hfile.cppfile.cpp实现file.h中的所有原型,而main.cpp包含file.h

非常简单的结构。我想知道如果我在main.cpp中声明了一个静态全局变量,那么在实现file.cpp中的所有功能时是否可以访问此类变量?快速尝试似乎并非如此……我什至无法编译它。

但是有可能解决这个问题吗?

请澄清一下我有

file.h:

#ifndef __FILE_H
#define __FILE_H
#include <iostream>

void my_func();

#endif

file.cpp

#include "file.h"

using namespace std;

void my_func() {
    //do something with my_static_var
}

和main.cpp

#include "file.h"

static int my_var = 0;

int main(int argc, char** argv) {
    my_func();
    return 0;
}

假设不涉及任何课程

2 个答案:

答案 0 :(得分:1)

具有内部链接的变量只能从其翻译单位(通常表示其源文件)中的范围进行引用。用static关键字声明的变量具有内部链接。

具有外部链接的变量可以从其他翻译单元(其他源文件)中引用。如果变量不在匿名名称空间中,并且具有以下条件,则该变量具有外部链接:

  • 使用extern关键字声明,或
  • 它是名称范围(例如问题中的my_var),并且没有用conststatic声明(与问题中的my_var不同)。

参考:storage duration

答案 1 :(得分:1)

不。这里的static的意思是“不要让我做”您要尝试做的事情。它通过内部链接使该对象对该翻译单元私有。

删除static,尽管您应该考虑避免使用全局变量,但是您会很高兴(在其他地方使用extern声明将其纳入范围)。