C_and_CPP 板


LINE

※ 引述《carlcarl (carl)》之铭言: : 嗯 刚刚看了一下 有这个的一些讲解 : 主要是讲printf的 : 那我在想 : 是不是自己在另外一个档写函式A的实做 : 然後在主档去呼叫这函式也是同样的情形呢?(没有include有写函式A实做的档) : 也就是我用gcc的话 compiler会另外把这函式A定义成一个回传int的extern函式? : (用g++的话 他会提醒说我在主档使用的函式是未宣告的) : 他的执行内容就变成未知的吗 ? 也就是不知道会执行什麽这样 : 因为我在测试的时候 有时後回传会有正确的值 有时候却是nan : 正确的值是碰巧产生的吗? : 用gdb测试也找不出来为什麽 用"p 函式A(参数)" 印出来都是正确的值 : "p 函式 " 印出来的函式定义也是正确的 : 而实际运作回传值给另外一个变数 就会是nan 怪怪的= =a 这是早期的 C 的一个规定 (不确定是否在 K&R 时代就有了的) 当一个尚未被宣告的函式被先呼叫时 compiler 要预设它是 int xxx() 即不检查参数 回传int (离题一下 int xxx(void) 和 int xxx() 是不同的喔 前者是没有参数 後者是不检查参数) 那正好 printf 也是回传 int 所以什麽事都没有 如果你是拿去呼叫 <math.h> 里的函式的话就惨了 因为里面大部份都是 double 或 float 为回传值的函式 那些函式不一定会用和 int 一样的方法来回传值 例如像在 x86 的机器上 近代的不少 compiler 实作成 double 是利用浮点数暂存器 st(0) 回传的 而不是像 int 一样用 eax 回传 所以到时回传回来是啥鬼完全不知道 (这里还可以扯到 calling convention 不过会扯太远就暂且打住) 而且到时在 link 的时候 linker 还会向你抱怨类似像「我找不到回传 int 的 pow 啦」 而 C++ 有规定函式要先宣告 取消了这种隐含宣告 所以 g++ 才会告诉你有函式未宣告 (是说前一阵子看那本日本人写的短码书有提到 忘了是 gcc 还是 g++ 有在 compiler 里面对 math.h 的函式做特殊处理 所以会自动判别那些其实是回传 double/float 而不用先 #include <math.h> 好像是 gcc 啦 暂时书不在手边不能查 QQ) --- 话说回来, 其实 #include 我一直把它定位成懒人用宣告指令 XD 因为这通常是用在跨档编译 很多档都会去用到某一些没写在这里的函式/结构/等等时 把那些东西的宣告给集中在一个 header file 里面 一口气 #include 进来而已 也就是说 你可以只在一个档里宣告函式 实作在另一个档里 不必写 header file 只要到时候有把它们 link 起来就好了 -- [LPH] Oops, your OOP's a problem? 说: 你现在还是看不到狗? ************* 说: 看得到 只是 他们不会跑 就一直呆呆在那边 一直在起点 [LPH] Oops, your OOP's a problem? 说: 你要按"ㄅㄧㄤˋ"它们才会跑啊@@" --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.250.80
1F:→ zlw:原来如此 03/08 07:36







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灯, 水草

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

TOP