C語言中typedef用法的疑惑——解惑公佈版
說明:下文引用的經典書籍K&R的《The C Programming Language》是中文版•新版第二版,由機械工業出版社發行,中文書名為《C語言程式設計》,譯者:徐寶文 李志 ; 審校:尤晉元
特別說明:函式型別與函式指標、函式返回值型別是不同概念
最近回顧C語言的語法結構時,對typedef的用法相當的困惑:來自於經典與實踐兩個方面的衝突。
相信學過C語言的,都知道K&R的《The C Programming Language》這本著作吧,其中位於參考手冊第203頁上數下第8、9行指出:特別是,不能通過typedef定義函式型別。也就是說如下程式碼是不合法的:
typedef int hsm(Void);
但是我將程式碼輸入編譯器編譯除錯執行時,語法檢查器並沒有指出錯誤資訊,程式執行正常。
在上面的typedef定義函式型別hsm後,就可以如下使用:
hsm * p;//定義了一個指向該函式型別的指標p//
經過除錯也沒有任何警告與錯誤的資訊。
網上的有些資料也指出typedef是可以定義函式型別,加上自己實際上機驗證也確實沒有錯誤,也許編譯器的語法支援不同,有些編譯器可能不支援;但是經典的K&R真是字字需要琢磨,句句需要詳細解析才能夠理解透徹,本人不敢輕易就下結論。作者之所以特別的指出,不能通過typedef定義函式型別,必有其緣由。本人知識水平有限,暫時無法明白作者為什麼這樣特別的指出。
今天終於解通這個問題:typedef屬於儲存類說明符,函式在定義時就只有並必須有extern與static兩種之間一種的儲存連結,所以像這樣的宣告:typedef int hsm(Void);在語法上是不合法的;之所以能夠在編譯語法檢查時沒有發出警告與錯誤,只能說明現在的編譯器都比較人性化,他能夠忽略一些簡單的不會導致重大問題的錯誤,並且按照它定義的方法直接解決這個錯誤,所以對於程式設計師來說就能夠把注意力放在更加重要的問題思考上。
相關文章
- 回應《C語言中typedef用法的疑惑》C語言
- C語言中關鍵字typedef、enum的使用C語言
- c語言中的&的用法C語言
- C語言中extern的用法C語言
- C語言中qsort函式的用法C語言函式
- C語言 typedefC語言
- C語言中的關鍵字“ volatile”的用法C語言
- typedef用法
- C語言中函式printf()和函式scanf()的用法C語言函式
- q語言中_的3種用法
- C語言中的#和##C語言
- 初學者疑惑:C語言中,函式反覆呼叫會有什麼問題?C語言函式
- typedef用法小結
- Object C學習筆記21-typedef用法Object筆記
- C語言中sync()C語言
- C語言中有C語言
- 解析C語言中的sizeofC語言
- C語言中&&,||,&,| 的區別C語言
- c語言中的作用域C語言
- 【C】 30_C語言中的字串C語言字串
- C++語言中std::array的神奇用法總結,你需要知道!C++
- C 語言中的 time 函式函式
- c語言中的關鍵字C語言
- C語言中的檔案流C語言
- C語言中的*和&符號C語言符號
- C語言中的abort函式C語言函式
- 解析C語言中的sizeof (轉)C語言
- C 語言中的 sscanf 詳解
- static在C語言中的作用C語言
- kdb+/q語言中?的2種用法展示
- C語言(typedef 型別取別名)C語言型別
- typedef的一些高階用法
- C 語言中 static 的作用介紹
- c語言中的getchar()和EOFC語言
- C語言中 * 和 &的實際理解C語言
- C語言中的static 詳細分析C語言
- C語言中的命令列引數C語言命令列
- C語言中史上最愚蠢的BugC語言