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!