- 为什么会有c语言会有未定义的行为?
个人理解:c语言中留下一部分内容没有规定,是为了给更大的自由度,即根据真正的需要来选用特定的平台编译,链接,执行。
但是现代编译器也遵守c语言很多没有要求,程序不知道该如何运行,于是出现报错。 - 分类
- 子表达式求值顺序未定义(除了含有逻辑与运算符及逻辑或运算符,条件运算符以及逗号运算符的子表达式)。例如,(b=a+2)-(a=1),编译器不知道a+2到底取用的是a的初始值还是被赋值后a的值1。
- 后缀自增/减稍后的时间未定义。(但是可以放心地假设将在下一条语句执行前进行自增。例如,a=i*i++,第一个i到底是自增后的i还是原来的i呢。此类是否由于第一个的原因,笔者尚未明确,亟待解决。