永发信息网

c语言中的extern怎么用?

答案:2  悬赏:20  手机版
解决时间 2021-03-19 11:28
  • 提问者网友:太高姿态
  • 2021-03-19 01:58
c语言中的extern怎么用?
最佳答案
  • 五星知识达人网友:野慌
  • 2021-03-19 02:27
extern在c中就是个外部申明,因为C是先申明再使用,当你想调用的变量或者函数不在你的模块当中,你可以使用外部申明。在使用外部申明的时候要特别注意,因为这只是个申明,并不是实体,当出现声明和实体不符的时候,编译器是不会管的,链接后就可能出现错误。比如你的实体是 int sample( int x ) ;而你在申明的时候是extern int sample( void ) ; 所以我不喜欢这种方式去声明。特别是多个人合作项目的时候,这种方法往往导致的结果很难去debug。即使是别人写好提供给你的,那他在修改了函数或者变量的类型,参数,往往会忘记修改给你的申明。
extern 还有个作用就是当你C和C++混用的时候,比如在C++中要使用C, 那么就要告诉编译器,你这段代码使用的是C,需要用C的编译器去编译,那可以使用extern "C" { .........} 否则编译会有问题
全部回答
  • 1楼网友:一叶十三刺
  • 2021-03-19 03:35
c c++都是以单一的源文件为一个独立的编译单元的,exten的声明使得当前的编译单元可以访问其他编译单元定义的变量,但是c c++的语法要求当前的编译单元必须预先声明. 名字查找是在命令空间中进行的,这个流程不是局限在某个编译单元中,而是在当前编译单元中所有可见的变量,包括include的,extern声明的.一旦查找到一个以上的名字,就会报错,就像你上面的一样. >> extern int i; //........这里只是声明,而没有定义是吧 >> int i; //.........既然上面没有定义,为什么这行还报错为“重复定义”呢 对于编译器而言,第一行是告诉他在别的编译单元定义了一个i的整型变量(这个可能定义了,也可能没有定义,编译器不做全局检查,是确定不了的.但是你的意图就是告诉编译器你在别的地方定义了这个变量,他还需要全局检查吗?),第二行告诉他在本编译单元也定义了一个同名的变量(这个是肯定定义了的),这是一种错误的行为. 名字查找不仅在编译阶段,在link阶段也会进行.如果冲突的话,也会报连接错误.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯