2012年(158)
分类: C/C++
2012-11-21 10:19:13
一个文件中
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++都是建议把他放到头文件中去的。