搜索
bottom↓
回复: 12

又一C语言的基础知识,关于extern,谁来解答下?

[复制链接]

出0入0汤圆

发表于 2010-10-13 17:06:21 | 显示全部楼层 |阅读模式
extern  fun1(void (*f)(int  )) { (*f)(7);}

void get(int n)
{
        printf("%u ",n );
}

void main()
{   
        fun1(get );

}

这段代码可以正常运行?为什么extern  fun1(void (*f)(int  )) { (*f)(7);}可以是定义?而不是表明引用

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入93汤圆

发表于 2010-10-13 17:27:02 | 显示全部楼层
这么高深的c语言是用来写神99的吧。

出0入0汤圆

发表于 2010-10-13 17:34:31 | 显示全部楼层
第一句话就是个函数实体;在这里,加不加 extern 意义不大,结果是一样的。

出0入0汤圆

发表于 2010-10-13 18:14:17 | 显示全部楼层
C中修饰函数的有extern和static两种,extern是可以省略的,所以平时没有任何修饰时都是extern的

出0入0汤圆

发表于 2010-10-13 18:42:26 | 显示全部楼层
回复【楼主位】Microchen2008
-----------------------------------------------------------------------

_ _

不知道你想问啥,这不是一个很正常的语句么...

出0入0汤圆

发表于 2010-10-13 21:51:22 | 显示全部楼层
第一次见这样的语句

出0入0汤圆

发表于 2010-10-13 22:20:01 | 显示全部楼层
extern有两种用法
1,在同一个文件中,某函数希望使用某全局变量,但全局变量的定义在此函数的后面,正常编译是会报错的,因此要在此函数内声明一下全局变量,并且加extern。
2,在不同文件间使用,由于全局变量或函数只能使用在本文件(其它文件include了这个文件的情况除外),如果其他文件也想使用这个变量或函数,就要在前面加extern。

而楼主的情况,应该是定义,是可以省略的;如果,有其它地方也extern  fun1这个函数,应该是会报错的。。。

我的理解是酱紫,如有错误之处,请斧正。

修改原因:查漏补缺。

出0入0汤圆

发表于 2010-10-13 23:37:45 | 显示全部楼层
在同一个文件里  完全没必要搞 extern  直接声明就行了

出0入0汤圆

发表于 2010-10-14 13:56:39 | 显示全部楼层
用到函数指针和指定默认参数了吧!

出0入0汤圆

发表于 2010-10-14 16:31:29 | 显示全部楼层
这和extern没有关系啊,至少要是不考虑别的文件的调用的话,这是可以去掉的!
至于函数么,也没有什么问题啊,只是一般不这么用,太晦涩了点,可读性比较差,分析一下:
其实也就是在fun1(get)中也就是指定了*f指向于get函数,(*f)(7)在代入之后也就是get(7),当然可以运行啊

出0入0汤圆

 楼主| 发表于 2010-10-25 20:25:38 | 显示全部楼层
明白,这是笔试中一个题目

出0入0汤圆

发表于 2010-10-25 23:59:27 | 显示全部楼层
回复【11楼】Microchen2008
明白,这是笔试中一个题目
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-6-9 21:59

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

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