首页 > 编程语言 > 详细

c与c++中的extern const的区别和联系

时间:2015-02-08 15:26:33      阅读:213      评论:0      收藏:0      [点我收藏+]

最近复习c++,发现了这个东西。

c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefined reference错误,这是因为在c语言里面,const全局变量在符号表里面是GLOBAL即全局可见的,而在c++里面却是LOCAL即只能在当前编译模块可见。

e.g.

在a.h中:

1 extern const int a;

在a.c中:

1 const int a = 10;

在main.c中:

1 #include<stdio.h>
2 #include"a.h"
3 
4 int main()
5 {
6     printf("%d\n",a);
7 }

gcc a.c main.c -o main

编译成功,输入./main输出10

我们使用gcc -c a.c -o a.o生成a.o,再使用readelf -s a.o查看符号表:

技术分享

可以看到最后一行,a在符号表中是GLOBAL的。

接下,我们不用改动代码,只是使用g++ a.c main.c -o main来编译程序,可以看到出错:

技术分享

链接出错,原因是找不到a的定义,

使用g++ -c a.c -o a.o生成a.o,再使用readelf -s a.o查看符号表:

技术分享

Num为6的那行表明,a变成了一个LOCAL对象,只能在a.o中可见,对main.o不可见。

解决方法:

将a.c 中的

1 const int a = 10;

改为:

1 extern const int a = 10;

这样g++编译器在第一次看到a的定义的时候,因为存在extern关键字,就把它当成GLOBAL对象写入符号表:

技术分享

 

c与c++中的extern const的区别和联系

原文:http://www.cnblogs.com/ylan2009/p/4279855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!