最近写代码,想导一个const全局变量 ,于是在头文件中:
extern const unsigned int MyVar;
在实现文件中:
const unsigned int MyVar = 10;
可是在链接时,其它文件中对MyVar的引用都报了找不到符号的错误,检查了半天,发现去掉MyVar的const修饰就可以。百思不得其解,只能请google来帮忙,于是才发现:原来C++中被const修饰的全局变量默认只在文件内可见!我说用readelf -s找不到目标文件中的MyVar变量呢!
解决办法:在实现文件中修改如下:
extern const unsigned int MyVar = 10;
即指定导出MyVar,这样编译就顺利通过了。
2、extern和const的功能
(1)extern就是告诉当前编译单元,不要为这个extern修饰的变量分配空间,这个变量已经在别的编译单元分配了空间。一般全局变量在多个编译单元使用的时候,需要extern。
(2)const这里是用来修饰不变量的,和extern没有必然的关系。