看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《e12518166339 (耐綸)》之銘言: : 另一個問題是 : 這是光碟中的範例 : #include <stdio.h> : using namespace std; : void main() : { : for (int i=1;i<=9;i++) : { : for(int j=1;j<=9;j++) : { : printf("%d*%d= %2d ",i,j,i*j); : } : printf("\n"); : } : } : 我再終端機下 : 執行 : nylon7@nylon7-desktop:~/桌面/LinuxCPP/ch01$ g++ loop.cpp : loop.cpp:1: 錯誤: 「::main」 必須回傳 「int」 : 後來同學叫我把void改成int : 然後最外面的{}打入return 0;就可以了 : 我想請問為什麼範例會有這樣的錯誤 : 我把錯誤訊息key上GOOGLE似乎都沒有類似的狀況 : 以上 你的書太舊了。 這個範例裡除了 using namespace 是 c++ 的東西之外, 剩下的都是 c 語言的寫法。 在 c++ 標準裡有一條: If control reaches the end of main without encountering a return statement, the effect is that of executing return 0; 也就是說依照標準實做的編譯器,在看到你沒有 return 敘述的時候 會自動加上 return 0; ,所以 return type 不能是 void。 c 語言沒有明確提到 main function 的 return type, 所以通常 c 編譯器遇到這種情況只會給你警告,不會編譯不過。 你可以把 using namespace 那一行拿掉再改用 gcc,而不是 g++ 編譯一次看看。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.231.68.160 ※ 編輯: freesamael 來自: 118.231.68.160 (07/12 13:56)
zerodevil:"c 語言沒有明確提到 main function 的 return type" 07/12 19:49
zerodevil:這句話不完全對. 早期的c沒規定, 但是c99有規定main一定 07/12 19:50
zerodevil:要return int. 07/12 19:50
zerodevil:gcc很好心的做了向下相容, 所以就算加參數-std=c99 07/12 19:52
zerodevil:-pedantic 也只會給個warning.. 07/12 19:52
zerodevil:如果只加-std=c99更是連叫都不會叫 07/12 19:54
freesamael:原來c99裡有規定阿@@ 我之前有稍微翻一下沒注意到 07/12 21:16