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 :
- Comportement de la fonction asynchrone englobante lorsque l’implémentation d’un awaiter des méthodes
INotifyCompletion.OnCompleted
d’interface etICriticalNotifyCompletion.UnsafeOnCompleted
n’entraîne pas l’appel du délégué de reprise au plus une fois (§12.9.8.4). - Passage de pointeurs en tant que paramètres de référence ou de sortie (§23.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).
- Lorsque l’opérateur unaire
*
est appliqué à un pointeur contenant une valeur non valide (§23.6.2). - Lorsqu’un pointeur est soumis à un indice pour accéder à un élément hors limites (§23.6.4).
- Modification d’objets de type managé par le biais de pointeurs fixes (§23.7).
- Contenu de la mémoire nouvellement allouée par
stackalloc
(§12.8.21). - Tentative d’allocation d’un nombre négatif d’éléments à l’aide
stackalloc
de (§12.8.21). - 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 :
- Gestion du caractère NULL Unicode (U+0000) dans une unité de compilation. (§6.1)
- Comportement lorsqu’un identificateur non dans le formulaire de normalisation C est rencontré. (§6.4.3)
- Valeur maximale autorisée dans
Decimal_Digit+
PP_Line_Indicator
. (§6.5.8) - Interprétation de la input_characters dans le texte pp_pragma d’une directive #pragma. (§6.5.10)
- Valeurs des paramètres d’application passés par
Main
l’environnement hôte avant le démarrage de l’application. (§7.1) - 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)
- Stratégie ou mécanismes utilisés par une implémentation pour la création et la destruction de domaines d’application. (§7.1)
- Code de sortie si la méthode de point d’entrée effective se termine en raison d’une exception. (§7.2)
- Indique si les finaliseurs sont exécutés dans le cadre de l’arrêt de l’application. (§7.2)
- Indique si les API autorisent l’exécution d’un finaliseur plusieurs fois. (§7.9)
- Indique si les finaliseurs sont exécutés dans le cadre de l’arrêt de l’application. (§7.9)
- Surface d’API fournie au-delà
Expression<TDelegate>
de l’exigence d’uneCompile
méthode. (§8.6) - 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)
- La raison pour laquelle une conversion en type délégué compatible peut échouer au moment de la compilation. (§10.7.3)
- Valeur retournée lorsqu’une allocation de taille zéro de la pile est effectuée. (§12.8.21)
- 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 ununchecked
contexte et l’opérande gauche d’une division entière est la valeur négative oulong
laint
valeur maximale et l’opérande droit est–1
. (§12.10.3) - 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) - 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)
- Mécanisme par lequel la liaison à une méthode externe est obtenue. (§15.6.8)
- 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). - Un environnement d’exécution peut fournir des attributs supplémentaires qui affectent l’exécution d’un programme C#. (§22.5.1)
- Mappages entre pointeurs et entiers. (§23.5.1)
- Effet de l’application de l’opérateur unaire
*
à unnull
pointeur. (§23.6.2) - Comportement lorsque le pointeur arithmétique dépasse le domaine du type de pointeur. (§23.6.6, §23.6.7)
- Résultat de l’opérateur
sizeof
pour les types valeur non définis. (§23.6.9) - Comportement de l’instruction si l’expression
fixed
de tableau estnull
ou si le tableau a zéro élément. (§23.7) - Comportement de l’instruction si l’expression
fixed
de chaîne estnull
. (§23.7)
Comportement non spécifié B.4
- 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).
- Représentation de
true
(§8.3.9). - Valeur du résultat lors de la conversion de valeurs hors limites en
float
double
type intégral dans ununchecked
contexte (§10.3.2). - L’objet cible exact et la méthode cible du délégué produit à partir d’un anonymous_method_expression contient (§10.7.2).
- Disposition des tableaux, sauf dans un contexte non sécurisé (§12.8.16.5).
- 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).
- Minutage exact de l’initialisation des champs statiques (§15.5.6.2).
- Résultat de l’appel
MoveNext
lorsqu’un objet énumérateur est en cours d’exécution (§15.14.5.2). - 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). - Résultat de l’appel
Dispose
lorsqu’un objet énumérateur est dans l’état en cours d’exécution (§15.14.5.4). - 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).
- Ordre dans lequel les membres sont emballés dans un struct (§23.6.9).
- Une exception se produit pendant l’exécution du finaliseur et cette exception n’est pas interceptée (§21.4).
- Si plusieurs membres correspondent, quel membre est l’implémentation de
I.M
(§18.6.5).
B.5 Autres problèmes
- 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).
- L’interface CLI réserve certaines signatures pour la compatibilité avec d’autres langages de programmation (§15.3.10).
Fin du texte informatif.
Collaborer avec nous sur GitHub
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.
ECMA C# draft specification