首页 > extern int 和extern const int的区别?

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里面能正确的运行。


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

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

global.cpp:

const int test = 5;

global.h

extern const int test = 5;


擦第一次有人邀请我回答问题

但是为什么会是我不很熟悉的 c++ ……

当看到LZ提的问题的时候我还不太信真会这样,换了几个编译器试,发现还真是会报错

然后就找到了

http://stackoverflow.com/questions/14894698/why-does-extern-const-int-n-not-work-as-expected


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


手头没环境,但是这段程序很多地方都有疑点:

C 和 C++ 混用的时候,C++ 里面要用 extern "C" 来包含 C 的头文件吧。
在 C++ 里 extern const int 中的 extern 可以省略。


const intint的区别与extern const intextern int的区别是一样的

【热门文章】
【热门文章】