[問題] function 中的 function

看板C_and_CPP作者 (gowrite)時間3年前 (2020/07/06 11:51), 3年前編輯推噓5(509)
留言14則, 9人參與, 3年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 10.1 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) n/a 問題(Question): 大家好,最近看到了一張大約 10 年前的考卷, 上面有一個題目,就是一個簡單的 C 語言, 大概是這樣 int func_1(int a){ int func_2(int num){ return num*num; } return func_2(a); } int main(){ printf("a = %d\n" , func_1(10) ); return 0; } 我的問題是,那張考卷上的答案寫說「這題的 C 程式無法編譯」 , 可是我用 GCC 自己照着考卷寫,卻可以編譯,且答案都正確 那請問這樣問題是出在那? 有可能 10 年前的 GCC 無法編譯這樣的程式嗎? 還是有可能是別的可能? 那個答案寫錯嗎? 但是該國家考試的考卷,並沒有更正該題錯誤 所以想問該怎麼理解這個問題?? 另外想請問一下 像這樣子把 function 寫在 function 裡面, 在別的語言很常見到這樣的寫法, 例如:JavaScript 但是在 C 語言裡面倒是第一次看到有人這樣寫,而且還是在考卷上 在之前閱讀過的 C 語言的教學書中,沒看過有人這樣教, 請問 C 語言真的可以這樣寫嗎? 有沒有錯誤的可能? 餵入的資料(Input): 皆正確,沒問題 預期的正確結果(Expected Output): 正確 錯誤結果(Wrong Output): 無,僅討論觀念問題 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) 上述程式碼 補充說明(Supplement): n/a -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.193.55 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1594007500.A.D9E.html ※ 編輯: gowrite (122.121.193.55 臺灣), 07/06/2020 11:52:33 ※ 編輯: gowrite (122.121.193.55 臺灣), 07/06/2020 11:54:25

07/06 11:58, 3年前 , 1F
這是GCC特有的
07/06 11:58, 1F

07/06 12:10, 3年前 , 2F
num 只有被 int 沒有質 所以num*num才跑不出來吧
07/06 12:10, 2F

07/06 13:13, 3年前 , 3F
-pedantic-errors 試試這個 option
07/06 13:13, 3F

07/06 18:45, 3年前 , 4F
好神 原來gcc這樣給過
07/06 18:45, 4F

07/06 18:45, 3年前 , 5F
查了一下 還真的 nested functions
07/06 18:45, 5F

07/06 19:01, 3年前 , 6F
這邊好像有討論過了 #1K-Pqe51
07/06 19:01, 6F

07/06 19:02, 3年前 , 7F
改用clang編就編不過的東西就不是標準
07/06 19:02, 7F

07/07 18:16, 3年前 , 8F
gcc 給過不代表是 c 語言特性,請參考 c spec
07/07 18:16, 8F

07/08 02:04, 3年前 , 9F
GNU extension
07/08 02:04, 9F

07/08 09:57, 3年前 , 10F
clang 記得也可以有 closure,不過也是 extension
07/08 09:57, 10F

07/08 09:58, 3年前 , 11F
在 clang 叫做 blocks,-fblocks
07/08 09:58, 11F

07/08 09:59, 3年前 , 12F
想要用 clang 編 gcc 的 source 應該可以用 -std=gnu11
07/08 09:59, 12F

07/08 09:59, 3年前 , 13F
之類的?
07/08 09:59, 13F

07/12 09:41, 3年前 , 14F
我記得C不能寫nested function欸
07/12 09:41, 14F
文章代碼(AID): #1V0f_CsU (C_and_CPP)