命名空间
变体
动作

如同规则

来自 cppreference.com
< c‎ | 语言

允许任何和所有不会改变程序可观察行为的代码转换。

[编辑] 解释

只要以下条件成立,C 编译器就可以对程序进行任何更改。

1) 在每个顺序点,所有易变对象的取值是稳定的(之前的评估已完成,新的评估未开始)。
(直到C11)
1)易变对象的访问(读写)严格按照表达式中出现的语义进行。特别是,它们不会被重新排序,相对于同一线程上的其他易变访问。
(从 C11 开始)
2) 在程序终止时,写入文件的数据与程序按原样执行时完全一致。
3) 发送到交互式设备的提示文本将在程序等待输入之前显示。
4) 如果支持预处理指令 #pragma STDC FENV_ACCESS且设置为ON,则浮点环境(浮点异常和舍入模式)的更改保证会被浮点算术运算符和函数调用观察到,就好像按原样执行一样,除了
  • 除强制转换和赋值之外的任何浮点表达式的结果可能具有与表达式类型不同的浮点类型的范围和精度(参见FLT_EVAL_METHOD),
  • 尽管有上述规定,任何浮点表达式的中间结果可能被计算为好像具有无限范围和精度(除非 #pragma STDC FP_CONTRACTOFF)。
(从 C99 开始)

[编辑] 注释

[编辑] 另请参见

C++ 文档如同规则