12. ANSI/ISO 標準 C
- 12.1 什麼是 ``ANSI C 標準"?
- 12.2 我如何得到一份標準的副本?
- 12.3 我在哪裡可以找到標準的更新?
- 12.4 很多 ANSI 編譯器在遇到以下代碼時都會警告類型不匹配。
extern int func(float);
int func(x)
float x;
{ ...
- 12.5 能否混用舊式的和新型的函數語法?
- 12.6 為什麼聲明
extern int f(struct x *p);
報出了一個奇怪的警告信息 ``結構 x 在參數列表中聲明"?
- 12.7 我不明白為什麼我不能像這樣在初始化和數組維度中使用常量:
const int n = 5;
int a[n];
- 12.8 既然不能修改字符串常量, 為什麼不把它們定義為字符常量的數組?
- 12.9 ``const char *p" 和 ``char * const p" 有何區別?
- 12.10 為什麼我不能向接受 const char ** 的函數傳入 char **?
- 12.11 怎樣正確聲明 main()?
- 12.12 我能否把 main() 定義為 void, 以避免擾人的 ``main無返回值" 警告?
- 12.13 可 main() 的第三個參數 envp 是怎麼回事?
- 12.14 我覺得把 main() 聲明為 void 不會失敗, 因為我調用了 exit()
而不是 return , 況且我的操作系統也忽略了程序的退出/返回狀態。
- 12.15 那麼到底會出什麼問題?真的有什麼系統不支持 void main() 嗎?
- 12.16 我一直用的那本書《熟練傻瓜C語言》總是使用 void main()。
- 12.17 從 main() 中, exit(status) 和返回同樣的 status 真的等價嗎?
- 12.18 我試圖用 ANSI ``字符串化" 預處理操作符 # 向信息中插入符號
常量的值, 但它字符串化的總是宏的名字而不是它的值。
- 12.19 警告信息 ``warning: macro replacement within a
string literal" 是什麼意思?
- 12.20 在我用 #ifdef 去掉的代碼裡出現了奇怪的語法錯誤。
- 12.21 #pragma 是什麼, 有什麼用?
- 12.22 ``#pragma once" 是什麼意思?我在一些頭文件中看到了它。
- 12.23 a[3] = "abc"; 合法嗎?它是什麼意思?
- 12.24 為什麼我不能對 void* 指針進行運算?
- 12.25 memcpy() 和 memmove() 有什麼區別?
- 12.26 malloc(0) 有什麼用?返回一個控指針還是指向 0
字節的指針?
- 12.27 為什麼 ANSI 標準規定了外部標示符的長度和大小寫限制?
- 12.28 我的編譯對最簡單的測試程序報出了一大堆的語法錯誤。
- 12.29 為什麼有些 ASNI/ISO 標準庫函數未定義?我明明使用
的就是 ANSI 編譯器。
- 12.30 誰有把舊的 C 程序轉化為 ANSI C 或相反的工具,
或者自動生成原型的工具?
- 12.31 為什麼聲稱兼容 ANSI 的 Frobozz Magic C 編譯器不能
編譯這些代碼?我知道這些代碼是 ANSI 的, 因為 gcc 可以編譯。
- 12.32 人們好像有些在意實現定義 (implementation-defin-ed)、未明確
(unspecified) 和無定義 (undefined) 行為的區別。它們的區別到底在哪裡?
- 12.33 一個程序的 ``合法", ``有效" 或 ``符合" 到底是什麼意思?
- 12.34 我很吃驚, ANSI 標準竟然有那麼多沒有定義的東西。
標準的唯一任務不就是讓這些東西標準化嗎?
- 12.35 有人說 i = i++ 的行為是未定義的, 但是我剛在一個兼容 ANSI
的編譯器上測試, 得到了我希望的結果。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)