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)