社区
C语言
帖子详情
g++中extern关键字的疑问
0153
2011-08-31 06:28:56
我在a.cpp中定义了一个全局量:
const char g_szErrMsg[] = {"error input\n"};
在b.cpp中做以下声明:
extern const char g_szErrMsg[];
然后再在函数里使用g_szErrMsg,但编译时g++报告说函数里找不到g_szErrMsg
奇怪的是把两边的const都删掉是可以编译通过的,不知是何原因?
...全文
64
4
打赏
收藏
g++中extern关键字的疑问
我在a.cpp中定义了一个全局量: const char g_szErrMsg[] = {"error input\n"}; 在b.cpp中做以下声明: extern const char g_szErrMsg[]; 然后再在函数里使用g_szErrMsg,但编译时g++报告说函数里找不到g_szErrMsg 奇怪的是把两边的const都删掉是可以编译通过的,不知是何原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pathuang68
2011-08-31
打赏
举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
因为const会默认让g_szErrMsg具有内部链接属性。
所以定义处要用:
extern const char g_szErrMsg[] = {"error input\n"};
要注意的是在C语言中const不是默认内部链接属性的,因此不用加。
[/Quote]
++
ericming200409
2011-08-31
打赏
举报
回复
原来c++的const还有这一出
0153
2011-08-31
打赏
举报
回复
谢谢,因为VC和gcc用得多,以前一直没注意,没想到g++是这样的。
baihacker
2011-08-31
打赏
举报
回复
因为const会默认让g_szErrMsg具有内部链接属性。
所以定义处要用:
extern const char g_szErrMsg[] = {"error input\n"};
要注意的是在C语言中const不是默认内部链接属性的,因此不用加。
《c语言深度解析》第3、4章 存储类、生命周期、作用域、链接域,指针与函数
课程内容:第3章:存储类与auto、static、register
关键字
指令、常量、变量的生命周期变量与函数的作用域链接域与
extern
、static
关键字
声明的意义第4章:存储空间、符号、地址一级指针与多级指针野指针与段错误void *指针类型const与指针函数指针 函数调用—栈的使用过程回调函数和函数指针数组指针与函数传参递归函数内联函数
C++
中
关于函数的
extern
链接性以及
extern
关键字
C++
中
extern
关键字
主要有三种作用,即声明变量的链接性、函数的链接性、以及语言的链接性。所谓的链接性(linkage)是指名称如何在不同的编译单元间共享。与其相应的是作用域(scope),它描述的是名称在一个编译单元的多大范围内可见。
C++
中
的definition & declaration的区别,涉及到
extern
关键字
有关这两者的区别和联系,之前其实一直都非常的模糊,特别是
extern
关键字
。这次读C++ Primer,在第二章正好读到,于是好好理解了一次,而且做了一些代码测试。结论是这样的: 1. definition只能用于变量,也就是定义一个变量,此时,变量的内存空间会被分配。诸如int i, int i = 10这样的都是definition,因为i变量会被分配内存。 2. declaration...
const
关键字
详解
const
关键字
的使用 可以节省空间,避免不必要的内存分配,因为编译器通常不为const常量分配内存空间,而是将它保存在符号表
中
,这样就没有了存储于读内存的操作,使效率也得以提高; c语言
中
被const修饰的变量虽然不能直接修改,但是可以间接的通过指针修改,在c++
中
不能修改被cosnt修饰的变量。 C++编译器对const常量的处理当碰见常量声明时,在符号表
中
放入常量;编译过程
中
若发现使用常量则直接以符号表
中
的值替换。编译过程
中
若发现对const使用了
extern
或者&操作符,则给对应的常量分配存
C语音
中
,static
关键字
的用法.两个
疑问
static修饰全局变量只能在本文件
中
使用。如果一个全局变量,它既可以在本源文件
中
被访问到,也可以在同一个工程的其它源文件
中
被访问就需要用到
extern
. // ------ file: m.c #include <iostream>
extern
void print1();
extern
void print2(); int main() { print1...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章