社区
C++ 语言
帖子详情
请问关于全局数组的问题
WiZiM
2006-08-20 07:28:22
我在1.cpp声明了一个全局数组extern int a[10][10];
我在2.cpp中为什么不能使用这个数组?
...全文
781
2
打赏
收藏
请问关于全局数组的问题
我在1.cpp声明了一个全局数组extern int a[10][10]; 我在2.cpp中为什么不能使用这个数组?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iihero_
2006-08-20
打赏
举报
回复
1 基本解释
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
另外,extern也可用在C++编译环境下进行C方式链接指定。
2 问题:extern 变量
在一个源文件里定义了一个数组:
char a[6];
在另外一个文件里用下列语句进行了声明:
extern char *a;
请问,这样可以正常使用char *a吗?
答案与分析:
1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。
2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义,易出现非法内存访问。
3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。
4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。
3 问题:extern 函数1
常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?
答案与分析:
如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); 和int f();
当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。
4 问题:extern 函数2
当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?
答案与分析:
目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明,然后调用方include该头文件,从而省去extern这一步。以避免这种错误。
宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。
5 问题:extern “C”
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
答案与分析:
C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
下面是一个标准的写法: 代码:
//在C++代码文件中
#ifdef __cplusplus
extern "C"
{
#endif
...
... // C++ 代码
...
#ifdef __cplusplus
}
#endif
a_b_c_abc9
2006-08-20
打赏
举报
回复
1.cpp定义一个全局数组 int a[10][10];
2.cpp中声明这个全局数组extern int a[10][10];
C语言中
全局
数组
和局部
数组
的
问题
今天同学遇到一个在C语言中
全局
数组
和局部
数组
的
问题
,卡了许久,我也没有第一时间看出
问题
,现在把
问题
梳理一下,并给出解决方案。
问题
描述: 在
全局
声明的
数组
与在局部声明的
数组
有着不同的效果。 首先来看一个...
PHP超
全局
数组
(Superglobals)介绍
超
全局
数组
超
全局
数组
是PHP中特殊定义的
数组
变量,之所以称为超
全局
数组
是因为这些
数组
在脚本中的任何地方、任何作用域内都可以访问,如函数、类、文件等。 PHP中的超
全局
数组
包括以下几个: 复制代码 代
C语言程序设计(高清PDF)
2.6.7 关于优先级的小结 27 2.7 表达式 28 2.7.1 表达式中的类型转换 28 2.7.2 构成符cast 29 2.7.3 空格与括号 29 2.7.4 C语言中的简写形式 29 第3章 程序控制语句 31 3.1 程序的三种基本结构 31 3.2 数据的输入与...
c语言 局部
数组
,C语言中
全局
数组
和局部
数组
的
问题
.doc
C语言中
全局
数组
和局部
数组
的
问题
语言中
全局
数组
和局部
数组
的
问题
今天同学遇到一个在语言中
全局
数组
和局部
数组
的
问题
,卡了许久,我也没有第一时间看出
问题
,现在把
问题
梳理一下,并给出解决方案。
问题
描述:在
全局
...
局部
数组
与
全局
数组
的区别
在本文中,我们将探讨局部
数组
和
全局
数组
之间的区别。通过了解这些差异,能够更好地理解变量在程序中的作用范围和生命周期,以及如何有效地使用它们来提高代码质量和性能。局部
数组
和
全局
数组
都是编程语言中的数据...
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章