marshallemon 发表于 2009-10-20 15:59:30

请问马老师,关于extern

我在一段程序中,发现把extern加在了本程序一个子程序的定义前,这是为何?像extern这个关键字不是用于声明是外部函数才用的?
如图:
http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_493815.JPG
(原文件名:未命名.JPG)

snail0204 发表于 2009-10-20 16:33:04

造成什么后果?

machao 发表于 2009-10-20 19:10:30

这个是多文件的使用,函数代码在一个文件中,而调用该函数的代码在另外的一个文件中。

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

marshallemon 发表于 2009-10-21 19:58:01

谢谢马老师的回答,但他这个用法让我十分不解,他不是在另外的引用处加EXTERN,图中可以看到它是在程序的定义处加的这个关键字,不知道有什么用意,这个程序是在CVAVR下编译的,没什么后果,正常编译.

BB101 发表于 2009-10-24 09:30:50

应该是按马老师那样说的做,错不了。
很可能写这个程序的人,本身对这个extern的用法也不大明白的缘故。
网上的东西都不一定都是正确的。
这个我在学习中发现很多。

marshallemon 发表于 2009-10-24 11:26:14

恩,谢谢楼上的回答,我就是看到这个东西的用法是非常规的,我以为是自己才疏学浅,作者是另有它用才……

longfeixue 发表于 2009-10-27 08:24:53

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

machao 发表于 2009-10-27 12:16:17

6楼的解释非常完整。

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

vincent.r 发表于 2009-10-27 12:23:40

【6楼】 longfeixue
解释的很细了。

marshallemon 发表于 2009-10-29 12:53:34

谢谢了,讲的真的很清楚,现在明白了
页: [1]
查看完整版本: 请问马老师,关于extern