C_and_CPP 板


LINE

ptt.cc BBS 站 C_and_CPP 板 FAQ (0.1版) 函式语法 Q: 有一次我忘了 #include <stdio.h> 就呼叫 printf() 竟然也可以,何故? A: 这是 C 比较不严谨的地方。 当我们呼叫一个函式 function_name()时,若 在呼叫处所在的范畴(scope)中,不存在相应的宣告,那麽 C 便会假定,包 含这个函式呼叫的最内层范畴中,存在这样的宣告: extern int function_name(); 对於这个隐式(implicit)的宣告,三点值得注意: 一、它具有外部连结。而且它的实际定义,存在於别处(也许编程者自己定 义在同一个原始码档的下方,也许存在於标准函式库中)。 二、它的传回值型别一律是 int。 三、它的参数未指定。(其後果参见上则) 所以如果我们在呼叫标准函式时,未能适当的引入标头档就直接呼叫。那麽 编译器就不再为我们根据标头档的函式宣告来做检查,也不会默默的替我们 去找标头档,只会根据上述的隐式宣告来编译这个源码档。最後在连结时, 连结器却会去标准函式库中硬生生的连结同名的函式。这样一来,即使我们 呼叫时传入的参数个数、型别,或是使用传回值的方式不合标准函式库那个 同名程式,一样会连结成功,产生一个不知会跑出什麽结果的可执行档。 例如: int main() { int s = 0; printf("s==%d\n", s); /* extern int printf() */ s = srand(1999); /* extern int srand() 和实际定义有出入 */ printf("s=="%d\n", s); return 0; } 其实 srand() 的传回型别是 void, 在这里却赋值给一个 int。因为没引入 标头档,编译器就失去为我们把关的能力。连结成功,执行的结果,在不同 系统上,会得到不同结果。 至於 C++ 在这方面就严谨多了,没有先明文宣告(包括引入合适的标头档), 是不能直接呼叫函式的。 呼叫一个并未明文宣告的函式是不良的 C 程式风格,更是错误的 C++ 程式。 结论就是,无论写 C 或 C++,都应该规规矩矩的,该 include 的就 include。 一时偷懒,要除错时就有得受了。 ----------------------------------- 敬请指正错误,或提出更合适的答案。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.208.167
1F:推 prudent:说的好~~ 顶一个... 220.142.39.22 09/02
※ 编辑: khoguan 来自: 220.130.208.167 (09/03 13:31)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP