搜索
bottom↓
回复: 9

请问马老师,关于extern

[复制链接]

出0入85汤圆

发表于 2009-10-20 15:59:30 | 显示全部楼层 |阅读模式
我在一段程序中,发现把extern加在了本程序一个子程序的定义前,这是为何?像extern这个关键字不是用于声明是外部函数才用的?
如图:

(原文件名:未命名.JPG)

出0入0汤圆

发表于 2009-10-20 16:33:04 | 显示全部楼层
造成什么后果?

出0入0汤圆

发表于 2009-10-20 19:10:30 | 显示全部楼层
这个是多文件的使用,函数代码在一个文件中,而调用该函数的代码在另外的一个文件中。

函数定义不需要加xtern这个关键字的,正确的应该在另外一个调用该函数的代码文件中用extern这个关键字声明调用的是(本文件以外的)外部函数。

出0入85汤圆

 楼主| 发表于 2009-10-21 19:58:01 | 显示全部楼层
谢谢马老师的回答,但他这个用法让我十分不解,他不是在另外的引用处加EXTERN,图中可以看到它是在程序的定义处加的这个关键字,不知道有什么用意,这个程序是在CVAVR下编译的,没什么后果,正常编译.

出0入0汤圆

发表于 2009-10-24 09:30:50 | 显示全部楼层
应该是按马老师那样说的做,错不了。
很可能写这个程序的人,本身对这个extern的用法也不大明白的缘故。
网上的东西都不一定都是正确的。
这个我在学习中发现很多。

出0入85汤圆

 楼主| 发表于 2009-10-24 11:26:14 | 显示全部楼层
恩,谢谢楼上的回答,我就是看到这个东西的用法是非常规的,我以为是自己才疏学浅,作者是另有它用才……

出0入0汤圆

发表于 2009-10-27 08:24:53 | 显示全部楼层
这个问题在谭浩强C语言函数那一章中关于内部函数和外部函数那一节中有明确的讲述。函数和变量一样也分局部的和全局的,函数本质上是外部的,因为编一个函数总是要被其他函数调用。但也可以定义只在一个源文件中被调用的函数,这时定义函数时可在前面加一个static,要定义一个可以被其文件调用的函数,就需要在定义函数时加一个extern。但是因为大部分函数都是外部的,所以为避免麻烦通常的extern就被省略了,我们平常定义的函数不加extern实,际是默认为外部的。当在其他函数中想调用该外部函数时,需先对该函数做外部声明,可用 extern + 函数名+ ;来表示,但通常此extern也可以省略,就变成了我们经常使用的函数原型声明。从这一点上说,函数函数原型声明的作用就相当于拓展了函数的作用域范围。

出0入0汤圆

发表于 2009-10-27 12:16:17 | 显示全部楼层
6楼的解释非常完整。

LZ的代码是标准正规写法,由于大家多采用通常的缺省和默认方式,反而被认为是非常规的了。

出0入0汤圆

发表于 2009-10-27 12:23:40 | 显示全部楼层
【6楼】 longfeixue
解释的很细了。

出0入85汤圆

 楼主| 发表于 2009-10-29 12:53:34 | 显示全部楼层
谢谢了,讲的真的很清楚,现在明白了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 11:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表