Maison  >  Article  >  développement back-end  >  Quelle est la différence entre le « comportement non défini » et le « mal formé ; aucun diagnostic requis » ?

Quelle est la différence entre le « comportement non défini » et le « mal formé ; aucun diagnostic requis » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-21 12:40:16589parcourir

What's the Difference Between C  's

Différence entre un comportement non défini et un comportement mal formé : aucun diagnostic requis

La spécification C définit différents types de comportement de programme, notamment indéfini, non spécifié, défini par l'implémentation, erroné , et mal formé. Bien que certaines distinctions soient relativement claires, le terme « mal formé ; aucun diagnostic requis » a soulevé des questions sur sa signification précise.

Définitions

Mal formé :A programme qui viole soit la syntaxe, soit les règles sémantiques diagnosticables.

Comportement non défini : Comportement du programme pour dont la norme ne fait aucune hypothèse ou exigence concernant les actions de mise en œuvre.

Erreur : Terme utilisé par la norme pour indiquer qu'un programme est mal formé ou adopte un comportement indéfini.

Bien formé : Un programme qui adhère à la syntaxe et à la sémantique diagnosticable règles.

Le cas du "mal formé ; aucun diagnostic requis"

Cette formulation spécifique apparaît lorsqu'une implémentation étend le langage d'une manière qui introduit une nouvelle syntaxe ou un nouveau comportement. Selon la norme, de telles extensions sont considérées comme mal formées, mais l'implémentation est autorisée à ne pas émettre de message de diagnostic.

Distinction du comportement non défini

La distinction cruciale ici est que le comportement non défini est explicitement reconnaît la nature erronée du programme, tandis que « mal formé ; aucun diagnostic requis » fait référence à un cas spécifique où l'implémentation permet une violation sans fournir d'erreur claire message.

Impact sur la compilation et l'exécution

Un programme mal formé ne devrait techniquement pas se compiler. Cependant, dans le cas de « mal formé ; aucun diagnostic requis », l'implémentation est techniquement autorisée à compiler silencieusement et même à exécuter le programme sans avertissement.

Problèmes de cohérence

Utilisation incohérente de la norme La terminologie entourant les erreurs a conduit à la confusion. Le terme « erroné » implique une erreur nécessitant un diagnostic, mais la section « Remarque » de la version 1.3.13 permet aux implémentations d'ignorer silencieusement de tels problèmes.

Conclusion

Bien qu'il puisse y avoir une différence subtile entre « mal formé ; aucun diagnostic requis » et « comportement indéfini », l'incohérence de la norme rend difficile l'établissement de distinctions claires. En fin de compte, les deux termes font référence à des situations dans lesquelles le comportement du programme est imprévisible et peut entraîner des résultats inattendus.

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!

Déclaration:
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