命名空间
变体
操作

“好像”规则

来自 cppreference.cn
< c‎ | 语言

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

[编辑] 解释

C 编译器可以对程序执行任何更改,只要以下条件保持不变

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

[编辑] 注意

[编辑] 另请参见

有关“仿佛”规则C++ 文档