Namespaces
Variants

As-if rule

From cppreference.net

Permite cualquier y todas las transformaciones de código que no cambien el comportamiento observable del programa.

Explicación

El compilador de C tiene permitido realizar cualquier cambio en el programa siempre que se mantenga lo siguiente:

1) En cada punto de secuencia , los valores de todos los objetos volatile son estables (las evaluaciones previas están completas, las nuevas evaluaciones no han comenzado).
(until C11)
1) Los accesos (lecturas y escrituras) a objetos volatile ocurren estrictamente de acuerdo con la semántica de las expresiones en las que aparecen. En particular, no se reordenan con respecto a otros accesos volatile en el mismo hilo.
(since C11)
2) Al finalizar el programa, los datos escritos en archivos son exactamente como si el programa se hubiera ejecutado tal como fue escrito.
3) El texto de solicitud que se envía a dispositivos interactivos se mostrará antes de que el programa espere la entrada.
4) Si la directiva pragma #pragma STDC FENV_ACCESS es compatible y está establecida en ON , se garantiza que los cambios en el entorno de punto flotante (excepciones de punto flotante y modos de redondeo) serán observados por los operadores aritméticos de punto flotante y las llamadas a funciones como si se ejecutaran según lo escrito, excepto que
  • el resultado de cualquier expresión de punto flotante distinta de conversión y asignación puede tener rango y precisión de un tipo de punto flotante diferente al tipo de la expresión (ver FLT_EVAL_METHOD ),
  • no obstante lo anterior, los resultados intermedios de cualquier expresión de punto flotante pueden calcularse como si tuvieran rango y precisión infinitos (a menos que #pragma STDC FP_CONTRACT esté en OFF ).
(desde C99)

Notas

Véase también

Documentación de C++ para regla as-if