Re: [問題]一個觀念問題

看板C_and_CPP (C/C++)作者 (燒賣)時間16年前 (2009/07/12 13:56), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

07/12 19:49, , 1F
"c 語言沒有明確提到 main function 的 return type"
07/12 19:49, 1F

07/12 19:50, , 2F
這句話不完全對. 早期的c沒規定, 但是c99有規定main一定
07/12 19:50, 2F

07/12 19:50, , 3F
要return int.
07/12 19:50, 3F

07/12 19:52, , 4F
gcc很好心的做了向下相容, 所以就算加參數-std=c99
07/12 19:52, 4F

07/12 19:52, , 5F
-pedantic 也只會給個warning..
07/12 19:52, 5F

07/12 19:54, , 6F
如果只加-std=c99更是連叫都不會叫
07/12 19:54, 6F

07/12 21:16, , 7F
原來c99裡有規定阿@@ 我之前有稍微翻一下沒注意到
07/12 21:16, 7F
文章代碼(AID): #1AMNhsLx (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1AMNhsLx (C_and_CPP)