[問題] 傳參數資料型態不同編譯器卻沒警告?

看板C_and_CPP作者時間14年前 (2011/11/30 15:13), 編輯推噓5(5020)
留言25則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): void TestFunc(unsigned int TestVar) { return ; } int main() { int Var = 123; TestFunc(Var); return (0); } 在呼叫TestFunc的時候,我故意傳入了不同資料型態(int)的變數,卻可以正常的完成 編譯(0 error, 0 warning)。 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 一般來說如果在傳值的過程中資料型態錯誤,編譯器應該會提出error或是warning, 為什麼這段程式碼卻可以正常的完成編譯呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.212.239

11/30 16:01, , 1F
隱式轉型 某些條件下編譯器會幫你做這件事
11/30 16:01, 1F

11/30 16:39, , 2F
謝謝你的關鍵字,忽然發現有這樣的機制在好危險。
11/30 16:39, 2F

11/30 17:16, , 3F
不知道能否關閉自動轉型?
11/30 17:16, 3F

11/30 17:17, , 4F
或是增加警告?
11/30 17:17, 4F

11/30 17:38, , 5F
我也還在找,這應該是在編譯器選項能找到。
11/30 17:38, 5F

11/30 18:01, , 6F
查到 gcc 有 -Wconversion 能找出可能造成值改變的隱式轉型
11/30 18:01, 6F

11/30 18:01, , 7F
不過像這種 signed/unsigned 可能需要加 -Wsign-conversion
11/30 18:01, 7F

11/30 18:17, , 8F
感謝,我記得以前看書的時候轉型只有很小的篇幅,沒想到
11/30 18:17, 8F

11/30 18:18, , 9F
會有重新認識它的一天XD
11/30 18:18, 9F

11/30 19:34, , 10F
~"~我覺得LPH66懂好多
11/30 19:34, 10F

11/30 20:17, , 11F
LP高手(咦?
11/30 20:17, 11F

11/30 21:32, , 12F
樓上XDDDDDDD 隱式轉型陷阱很多
11/30 21:32, 12F

11/30 23:51, , 13F
-Wall -Wextra -pedantic 常駐XD
11/30 23:51, 13F

12/01 00:12, , 14F
樓上++
12/01 00:12, 14F

12/01 00:18, , 15F
嘛, 我在高中三年已經被叫LP叫習慣了 = =
12/01 00:18, 15F

12/01 00:19, , 16F
我這個 ID 是在那位大人講出那個縮寫之前就取了的 (攤手)
12/01 00:19, 16F

12/01 00:53, , 17F
那.. 以後敬語從 L 大改 LP 大好了 (~逃
12/01 00:53, 17F

12/01 01:35, , 18F
~"~離題離太遠了
12/01 01:35, 18F

12/01 04:34, , 19F
-Werror 如何? 最好用
12/01 04:34, 19F

12/01 10:23, , 20F
-Wall -Wextra -pedantic -Wconversion -Werror<-crazy
12/01 10:23, 20F

12/01 13:54, , 21F
-Werror 很容易令人發瘋XD
12/01 13:54, 21F

12/01 14:00, , 22F
其實xatier搞錯一個重點,是開了所有檢查警告的參數
12/01 14:00, 22F

12/01 14:01, , 23F
再開-Werror才會發瘋. >.可是這樣做才能保持品質喔.
12/01 14:01, 23F

12/01 14:01, , 24F
雖然工程師會脾氣上升啦
12/01 14:01, 24F

12/01 16:54, , 25F
同意 XD 但是這樣能逼自己寫出好 code!
12/01 16:54, 25F
文章代碼(AID): #1ErTUWst (C_and_CPP)