Partager via


Problèmes de portabilité de l’annexe B

Cette clause est informative.

B.1 Général

Cette annexe collecte des informations sur la portabilité qui apparaît dans cette spécification.

Comportement non défini B.2

Le comportement n’est pas défini dans les circonstances suivantes :

  1. Comportement de la fonction asynchrone englobante lorsque l’implémentation d’un awaiter des méthodes INotifyCompletion.OnCompleted d’interface et ICriticalNotifyCompletion.UnsafeOnCompleted n’entraîne pas l’appel du délégué de reprise au plus une fois (§12.9.8.4).
  2. Passage de pointeurs en tant que paramètres de référence ou de sortie (§23.3).
  3. Lorsque vous désréférencez le résultat de la conversion d’un type de pointeur en un autre et que le pointeur résultant n’est pas correctement aligné pour le type pointu à type. (§23.5.1).
  4. Lorsque l’opérateur unaire * est appliqué à un pointeur contenant une valeur non valide (§23.6.2).
  5. Lorsqu’un pointeur est soumis à un indice pour accéder à un élément hors limites (§23.6.4).
  6. Modification d’objets de type managé par le biais de pointeurs fixes (§23.7).
  7. Contenu de la mémoire nouvellement allouée par stackalloc (§12.8.21).
  8. Tentative d’allocation d’un nombre négatif d’éléments à l’aide stackallocde (§12.8.21).
  9. Conversions dynamiques implicites (§10.2.10) des paramètres d’entrée avec des arguments de valeur (§12.6.4.2).

Comportement défini par l’implémentation B.3

Une implémentation conforme est nécessaire pour documenter son choix de comportement dans chacune des zones répertoriées dans ce sous-volet. Les éléments suivants sont définis par l’implémentation :

  1. Gestion du caractère NULL Unicode (U+0000) dans une unité de compilation. (§6.1)
  2. Comportement lorsqu’un identificateur non dans le formulaire de normalisation C est rencontré. (§6.4.3)
  3. Valeur maximale autorisée dans Decimal_Digit+ PP_Line_Indicator. (§6.5.8)
  4. Interprétation de la input_characters dans le texte pp_pragma d’une directive #pragma. (§6.5.10)
  5. Valeurs des paramètres d’application passés par Main l’environnement hôte avant le démarrage de l’application. (§7.1)
  6. Mécanisme permettant de déterminer si un programme est compilé en tant que bibliothèque de classes ou en tant qu’application. (§7.1)
  7. Stratégie ou mécanismes utilisés par une implémentation pour la création et la destruction de domaines d’application. (§7.1)
  8. Code de sortie si la méthode de point d’entrée effective se termine en raison d’une exception. (§7.2)
  9. Indique si les finaliseurs sont exécutés dans le cadre de l’arrêt de l’application. (§7.2)
  10. Indique si les API autorisent l’exécution d’un finaliseur plusieurs fois. (§7.9)
  11. Indique si les finaliseurs sont exécutés dans le cadre de l’arrêt de l’application. (§7.9)
  12. Surface d’API fournie au-delà Expression<TDelegate> de l’exigence d’une Compile méthode. (§8.6)
  13. Structure précise de l’arborescence d’expressions, ainsi que le processus exact de création, lorsqu’une fonction anonyme est convertie en arborescence d’expressions. (§10.7.3)
  14. La raison pour laquelle une conversion en type délégué compatible peut échouer au moment de la compilation. (§10.7.3)
  15. Valeur retournée lorsqu’une allocation de taille zéro de la pile est effectuée. (§12.8.21)
  16. Si une System.ArithmeticException (ou une sous-classe de celle-ci) est levée ou si le dépassement de capacité n’est pas signalé avec la valeur résultante étant celle de l’opérande gauche, lorsqu’dans un unchecked contexte et l’opérande gauche d’une division entière est la valeur négative ou long la int valeur maximale et l’opérande droit est –1. (§12.10.3)
  17. Lorsqu’une System.ArithmeticException (ou une sous-classe de celle-ci) est levée lors de l’exécution d’une opération de reste décimale. (§12.10.4)
  18. L’impact de l’arrêt du thread lorsqu’un thread n’a pas de gestionnaire pour une exception et que le thread est lui-même arrêté. (§13.10.6)
  19. Mécanisme par lequel la liaison à une méthode externe est obtenue. (§15.6.8)
  20. L’impact de l’arrêt de thread lorsqu’aucune clause correspondante catch n’est trouvée pour une exception et le code qui a démarré initialement ce thread est atteint. (§21.4).
  21. Un environnement d’exécution peut fournir des attributs supplémentaires qui affectent l’exécution d’un programme C#. (§22.5.1)
  22. Mappages entre pointeurs et entiers. (§23.5.1)
  23. Effet de l’application de l’opérateur unaire * à un null pointeur. (§23.6.2)
  24. Comportement lorsque le pointeur arithmétique dépasse le domaine du type de pointeur. (§23.6.6, §23.6.7)
  25. Résultat de l’opérateur sizeof pour les types valeur non définis. (§23.6.9)
  26. Comportement de l’instruction si l’expression fixed de tableau est null ou si le tableau a zéro élément. (§23.7)
  27. Comportement de l’instruction si l’expression fixed de chaîne est null. (§23.7)

Comportement non spécifié B.4

  1. Heure à laquelle le finaliseur (le cas échéant) d’un objet est exécuté, une fois que cet objet est éligible à la finalisation (§7.9).
  2. Représentation de true (§8.3.9).
  3. Valeur du résultat lors de la conversion de valeurs hors limites en float double type intégral dans un unchecked contexte (§10.3.2).
  4. L’objet cible exact et la méthode cible du délégué produit à partir d’un anonymous_method_expression contient (§10.7.2).
  5. Disposition des tableaux, sauf dans un contexte non sécurisé (§12.8.16.5).
  6. Qu’il existe un moyen d’exécuter le bloc d’une fonction anonyme autre que l’évaluation et l’appel de la lambda_expression ou de l’expression anonymous_method (§12.19.3).
  7. Minutage exact de l’initialisation des champs statiques (§15.5.6.2).
  8. Résultat de l’appel MoveNext lorsqu’un objet énumérateur est en cours d’exécution (§15.14.5.2).
  9. Résultat de l’accès Current lorsqu’un objet énumérateur se trouve dans les états antérieurs, en cours d’exécution ou après (§15.14.5.3).
  10. Résultat de l’appel Dispose lorsqu’un objet énumérateur est dans l’état en cours d’exécution (§15.14.5.4).
  11. Les attributs d’un type déclaré dans plusieurs parties sont déterminés en combinant, dans un ordre non spécifié, les attributs de chacune de ses parties (§22.3).
  12. Ordre dans lequel les membres sont emballés dans un struct (§23.6.9).
  13. Une exception se produit pendant l’exécution du finaliseur et cette exception n’est pas interceptée (§21.4).
  14. Si plusieurs membres correspondent, quel membre est l’implémentation de I.M (§18.6.5).

B.5 Autres problèmes

  1. Les résultats exacts de l’évaluation des expressions à virgule flottante peuvent varier d’une implémentation à une autre, car une implémentation est autorisée à évaluer ces expressions à l’aide d’une plage et/ou d’une précision supérieures à celles requises (§8.3.7).
  2. L’interface CLI réserve certaines signatures pour la compatibilité avec d’autres langages de programmation (§15.3.10).

Fin du texte informatif.