你有遇到下面這些奇奇怪怪的問題嗎,你了解ANSI/ISO 标準 C嗎,作為一名有一定功底的程序員這些你應該懂:
11.1 什麼是 “ANSI C 标準”?
11.2 我如何得到一份标準的副本?
11.3 我在哪裡可以找到标準的更新?
11.4 很多 ANSI 編譯器在遇到以下代碼時會警告類型不匹配。extern int func(float); int func(x) float x; {
11.5 能否混用舊式的和新型的函數語法?
11.6 為什麼聲明 extern int f(struct x *p); 報出了一個奇怪的警告信 息 “結構 x 在參數列表中聲明”?
11.7 我不明白為什麼我不能象這樣在初始化和數組維度中使用常量:const int n = 5; int a[n];
11.8 既然不能修改字符串常量, 為什麼不把它們定義為字符常量的數 組?
11.9 “const char *p” 和 “char * const p” 有何區别?
11.10 為什麼我不能向接受 const char ** 的函數傳入 char **?
11.11 怎樣正确聲明 main()?
11.12 我能否把 main() 定義為 void, 以避免擾人的 “main無返回值” 警 告?
11.13 可 main() 的第三個參數 envp 是怎麼回事?
11.14 我覺得把 main() 聲明為 void 不會失敗, 因為我調用了 exit() 而不 是 return , 況且我的操作系統也忽略了程序的退出/返回狀态。
11.15 那麼到底會出什麼問題?真的有什麼系統不支持 void main() 嗎?
11.16 我一直用的那本書《熟練傻瓜C語言》總是使用 void main()。
11.17 從 main() 中, exit(status) 和返回同樣的 status 真的等價嗎?
11.18 我試圖用 ANSI “字符串化” 預處理操作符 # 向信息中插入符号 常量的值, 但它字符串化的總是宏的名字而不是它的值。
11.19 警告信息 “warning: macro replacement within a string literal” 是 什麼意思?
11.20 在我用 #ifdef 去掉的代碼裡出現了奇怪的語法錯誤。
11.21 #pragma 是什麼, 有什麼用?
11.22 “#pragma once” 是什麼意思?我在一些頭文件中看到了它。
11.23 a[3] = "abc"; 合法嗎?它是什麼意思?
11.24 為什麼我不能對 void* 指針進行運算?
11.25 memcpy() 和 memmove() 有什麼區别?
11.26 malloc(0) 有什麼用?返回一個控指針還是指向 0 字節的指針?
11.27 為什麼 ANSI 标準規定了外部标示符的長度和大小寫限制?
11.28 我的編譯對最簡單的測試程序報出了一大堆的語法錯誤。
11.29 為什麼有些 ASNI/ISO 标準庫函數未定義?我明明使用的就是ANSI 編譯器。
11.30 誰有把舊的 C 程序轉化為 ANSI C 或相反的工具, 或者自動生成 原型的工具?
11.31 為什麼聲稱兼容 ANSI 的 Frobozz Magic C 編譯器不能編譯這些 代碼?我知道這些代碼是 ANSI 的, 因為 gcc 可以編譯。
11.32 人們好像有些在意實現定義 (implementation-defin-ed)、未明确(unspecified) 和無定義 (undefined) 行為的區别。它們的區别到底在哪裡?
11.33 一個程序的 “合法”, “有效” 或 “符合” 到底是什麼意思?
11.34 我很吃驚, ANSI 标準竟然有那麼多沒有定義的東西。标準的唯一 任務不就是讓這些東西标準化嗎?
11.35 有人說 i = i 的行為是未定義的, 但是我剛在一個兼容 ANSI 的 編譯器上測試, 得到了我希望的結果。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!