A bunch of stuff I used to not know about K&R C
7 hours ago
- #pre-ANSI C
- #C programming
- #K&R C
- 由于单遍编译器设计以及K&R C中缺乏函数原型作用域,C语言的语法是上下文相关的。
- `void` 关键字和诸如 `const` 的类型限定符是ANSI的发明;ANSI之前的C使用 `int` 作为返回类型且字符串字面量是可变的。
- ANSI之前的C缺少 `signed` 说明符,类型组合有限(例如没有 `unsigned char`),并使用 `long float` 作为 `double` 的同义词。
- 整数提升规则存在分歧:'保留无符号'与'保留值'(已标准化),没有 `U` 后缀,且无符号常量在符合 `int` 类型范围时具有 `int` 类型。
- 八进制常量允许数字8和9;缺少诸如 `\a` 的转义序列,且 `\"` 通过反斜杠丢弃实际上有效。
- 预处理器缺少 `##`、`#`、`#elif`、`defined` 运算符以及预定义宏;行延续仅限于特定上下文。
- 函数声明符缺少类型化的参数列表,阻止了可变参数函数的声明;不允许函数类型的参数。
- 结构体/联合体受限:没有赋值、函数参数/返回,或对 `auto` 结构体/联合体的复合初始化器。
- 复合赋值运算符被词法分析为两个标记(例如,`+ =`);原始的 `=+` 是单个标记但已过时。
- 控制流到达 `main` 函数末尾在标准之前被隐含为成功,在C89中成为未定义行为,在C99中特殊处理为隐式返回0。