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.
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.
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.
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.
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.
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.
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!