Namespaces
Variants

As-if rule

From cppreference.net

Permet toutes les transformations de code qui ne modifient pas le comportement observable du programme.

Explication

Le compilateur C est autorisé à effectuer toute modification du programme tant que les conditions suivantes restent vraies :

1) À chaque point de séquence , les valeurs de tous les objets volatile sont stables (les évaluations précédentes sont terminées, les nouvelles évaluations n'ont pas commencé).
(jusqu'à C11)
1) Les accès (lectures et écritures) aux objets volatile se produisent strictement selon la sémantique des expressions dans lesquelles ils apparaissent. En particulier, ils ne sont pas réordonnés par rapport aux autres accès volatiles sur le même thread.
(depuis C11)
2) À la fin du programme, les données écrites dans les fichiers sont exactement comme si le programme avait été exécuté tel qu'écrit.
3) Le texte d'invite qui est envoyé aux dispositifs interactifs sera affiché avant que le programme n'attende une entrée.
4) Si la directive pragma #pragma STDC FENV_ACCESS est prise en charge et définie sur ON , les modifications apportées à l'environnement en virgule flottante (exceptions en virgule flottante et modes d'arrondi) sont garanties d'être respectées par les opérateurs arithmétiques en virgule flottante et les appels de fonction comme s'ils étaient exécutés tels qu'écrits, sauf que
  • le résultat de toute expression en virgule flottante autre qu'un cast et une assignation peut avoir la plage et la précision d'un type en virgule flottante différent du type de l'expression (voir FLT_EVAL_METHOD ),
  • nonobstant ce qui précède, les résultats intermédiaires de toute expression en virgule flottante peuvent être calculés comme s'ils avaient une plage et une précision infinies (sauf si #pragma STDC FP_CONTRACT est OFF ).
(depuis C99)

Notes

Voir aussi

Documentation C++ pour règle as-if