首页 > C/C++语言 > C/C++基本语法 > const在C和C++中的一个区别
2007
01-08

const在C和C++中的一个区别


一个文件中
    const int a = 1;
另一个文件中
    extern const int a;
    cout << a << endl;
类似的代码在C中OK,但在C++中没能Link通过。


改为
一个文件中
extern “C” {
    const int a = 1;
}
另一个文件中
extern “C” {
    extern const int a;
    cout << a << endl;
}
在C++中也没能Link通过。


[全局变量]给我的解答是:


C and C++ const Differences
When you declare a variable as const in a C source code file, you do so as:


const int i = 2;


You can then use this variable in another module as follows:


extern const int i;


But to get the same behavior in C++, you must declare your const variable as:


extern const int i = 2;


If you wish to declare an extern variable in a C++ source code file for use in a C source code file, use:


extern “C” const int x=10;


to prevent name mangling by the C++ compiler.


于是我改为
一个文件中
    extern “C” const int a = 1;
另一个文件中
    extern “C” const int a;
    cout << a << endl;
在C++中OK


改为
一个文件中
extern “C” {
    extern “C” const int a = 1;
}
另一个文件中
extern “C” {
    extern “C” const int a;
}
在C++中也OK


看来 extern “C” 和 extern “C” {} 还是有区别的^_^

—————————————-

const在C和C++中的其他区别不说了,比如const在C++偏向于“常量”,而在C中偏向于“只读”

简单的说,在C++中,a 是一个编译期常量,所以不进obj文件,用extern无效。
在这种情况下,C++都是建议把他放到头文件中去的。


转自 周星星BLOG


留下一个回复