Maison > développement back-end > C++ > Comportement non défini vs « Mal formé, aucun diagnostic requis » : quelle est la différence ?

Comportement non défini vs « Mal formé, aucun diagnostic requis » : quelle est la différence ?

Susan Sarandon
Libérer: 2024-12-02 16:14:12
original
794 Les gens l'ont consulté

Undefined Behavior vs.

Différence entre un comportement non défini et « Mal formé, aucun diagnostic requis »

La norme C classe le comportement du programme en diverses catégories, y compris bien -formé, mal formé, non spécifié et indéfini. Le « comportement non défini » fait référence aux situations dans lesquelles la norme ne fournit aucune exigence ou hypothèse concernant la réponse de la mise en œuvre. En revanche, les programmes « mal formés » violent la syntaxe ou les règles sémantiques et ne sont pas considérés comme bien formés.

L'expression « mal formé ; aucun diagnostic requis » apparaît dans la norme et semble contredire la définition de un programme mal formé. Selon la norme, une implémentation conforme doit accepter et exécuter un programme bien formé, alors qu'il n'y a aucune exigence pour les programmes mal formés, sauf en cas d'utilisation d'extensions.

Cette incohérence vient du fait que le C La norme s'inspire de la norme C, qui considère toutes les erreurs comme un comportement indéfini, sauf indication contraire explicite. Cependant, la norme C visait à exiger des diagnostics pour toutes les erreurs par défaut.

En fin de compte, la présence de « aucun diagnostic requis » indique que le comportement en question n'est pas considéré comme indéfini. Il diffère du « comportement non défini » uniquement en ce que la norme permet explicitement au compilateur de poursuivre la compilation et l'exécution sans émettre d'erreur ou d'avertissement. Cette distinction est principalement utilisée pour décrire les problèmes d'exécution plutôt que les erreurs grammaticales.

En résumé, même si le terme « mal formé ; aucun diagnostic requis » peut sembler déroutant, il signifie essentiellement la même chose qu'un comportement indéfini. Il représente des situations dans lesquelles le programme n'est pas bien formé mais où le compilateur est autorisé à continuer sans fournir de diagnostic. La principale différence est que « mal formé ; aucun diagnostic requis » fait généralement référence à des problèmes d'exécution, tandis que « comportement non défini » englobe à la fois les erreurs grammaticales et les problèmes d'exécution.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal