extern int 和extern const int的区别?

有以下几个文件:

global.cpp:

int test = 5;

global.h

extern int test;

extern.h

include "global.h"
void test_fun();

extern.cpp

#include<stdio.h>
#include "extern.h"

void test_fun()
{
    printf("%d\n", test);
}

main.cpp

#include "extern.h"

int main(int argc, char *argv[])
{
    test_fun();
    return 0;
}

上面的代码运行起来是没有问题的,但是,当我把global.cpp和global.h里面的int改成const int类型之后就会报下面的错误:

error LNK2001: unresolved external symbol "int const test"

请问const int 和 int 在extern下作用的区别是什么,为什么第二种情况会报错?

更新: 这个问题只会出现在C++里面,在C里面能正确的运行。

阅读 11.5k
5 个回答

我来做个中文解释的吧~~

C++中被const修饰的全局变量默认只在文件内可见

global.cpp:

const int test = 5;

global.h

extern const int test = 5;

新手上路,请多包涵

global.cpp文件中不要加#include "global.h"吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进