Problemas de portabilidad del anexo B
Esta cláusula es informativa.
B.1 General
Este anexo recopila información sobre la portabilidad que aparece en esta especificación.
B.2 Comportamiento indefinido
El comportamiento no está definido en las siguientes circunstancias:
- El comportamiento de la función asincrónica envolvente cuando la implementación de un awaiter de los métodos
INotifyCompletion.OnCompleted
de interfaz yICriticalNotifyCompletion.UnsafeOnCompleted
no hace que el delegado de reanudación se invoque como máximo una vez (§12.9.8.4). - Pasar punteros como parámetros de referencia o salida (§23.3).
- Al desreferenciar el resultado de convertir un tipo de puntero a otro y el puntero resultante no se alinea correctamente para el tipo señalado. (§23.5.1).
- Cuando el operador unario
*
se aplica a un puntero que contiene un valor no válido (§23.6.2). - Cuando se subíndice un puntero para acceder a un elemento fuera de límites (§23.6.4).
- Modificar objetos de tipo administrado a través de punteros fijos (§23.7).
- El contenido de la memoria recién asignada por
stackalloc
(§12.8.21). - Intentar asignar un número negativo de elementos mediante
stackalloc
(§12.8.21). - Conversiones dinámicas implícitas (§10.2.10) de parámetros de entrada con argumentos de valor (§12.6.4.2).
B.3 Comportamiento definido por la implementación
Se requiere una implementación conforme para documentar su elección de comportamiento en cada una de las áreas enumeradas en esta subclausa. A continuación se definen las implementaciones:
- Control del carácter Unicode NULL (U+0000) en una unidad de compilación. (§6.1)
- Comportamiento cuando se encuentra un identificador que no está en el formulario de normalización C. (§6.4.3)
- Valor máximo permitido para
Decimal_Digit+
enPP_Line_Indicator
. (§6.5.8) - Interpretación del input_characters en el texto pp_pragma de una directiva #pragma. (§6.5.10)
- Los valores de los parámetros de aplicación pasados
Main
por el entorno host antes del inicio de la aplicación. (§7.1) - Mecanismo para determinar si un programa se compila como una biblioteca de clases o como una aplicación. (§7.1)
- Directiva o mecanismos utilizados por una implementación para la creación y destrucción de dominios de aplicación. (§7.1)
- Código de salida si el método de punto de entrada efectivo finaliza debido a una excepción. (§7.2)
- Indica si los finalizadores se ejecutan como parte de la terminación de la aplicación. (§7.2)
- Si las API permiten ejecutar un finalizador más de una vez. (§7.9)
- Indica si los finalizadores se ejecutan como parte de la terminación de la aplicación. (§7.9)
- Superficie de API proporcionada por
Expression<TDelegate>
más allá del requisito de unCompile
método. (§8.6) - Estructura precisa del árbol de expresiones, así como el proceso exacto para crearlo, cuando se convierte una función anónima en un árbol de expresiones. (§10.7.3)
- La razón por la que se puede producir un error en una conversión a un tipo de delegado compatible en tiempo de compilación. (§10.7.3)
- Valor devuelto cuando se realiza una asignación de pila de tamaño cero. (§12.8.21)
System.ArithmeticException
Si se produce (o una subclase de ahí) o el desbordamiento no se notifica con el valor resultante que es el del operando izquierdo, cuando en ununchecked
contexto y el operando izquierdo de una división de enteros es el valor máximo negativoint
olong
el valor y el operando derecho es–1
. (§12.10.3)System.ArithmeticException
Cuando se produce una (o una subclase) al realizar una operación de resto decimal. (§12.10.4)- Impacto de la terminación del subproceso cuando un subproceso no tiene ningún controlador para una excepción y el subproceso finaliza. (§13.10.6)
- Mecanismo por el que se logra la vinculación a un método externo. (§15.6.8)
- El impacto de la terminación del subproceso cuando no se encuentra ninguna cláusula coincidente
catch
para una excepción y el código que inicialmente inició ese subproceso se alcanza. (§21.4). - Un entorno de ejecución puede proporcionar atributos adicionales que afectan a la ejecución de un programa de C#. (§22.5.1)
- Asignaciones entre punteros y enteros. (§23.5.1)
- Efecto de aplicar el operador unario
*
a unnull
puntero. (§23.6.2) - El comportamiento cuando la aritmética de puntero desborda el dominio del tipo de puntero. (§23.6.6, §23.6.7)
- Resultado del
sizeof
operador para los tipos de valor no predefinidos. (§23.6.9) - Comportamiento de la
fixed
instrucción si la expresión de matriz esnull
o si la matriz tiene cero elementos. (§23.7) - Comportamiento de la
fixed
instrucción si la expresión de cadena esnull
. (§23.7)
B.4 Comportamiento no especificado
- Hora en la que se ejecuta el finalizador (si existe) para un objeto, una vez que ese objeto se ha convertido en apto para la finalización (§7.9).
- Representación de
true
(§8.3.9). - Valor del resultado al convertir valores fuera del intervalo de valores de
float
o a un tipo entero en ununchecked
contexto (§10.3.2double
). - El objeto de destino exacto y el método de destino del delegado generado a partir de un anonymous_method_expression contiene (§10.7.2).
- Diseño de matrices, excepto en un contexto no seguro (§12.8.16.5).
- Si hay alguna manera de ejecutar el bloque de una función anónima distinta de la evaluación e invocación de la lambda_expression o anonymous_method-expression (§12.19.3).
- El tiempo exacto de inicialización de campos estáticos (§15.5.6.2).
- Resultado de invocar
MoveNext
cuando se ejecuta un objeto enumerador (§15.14.5.2). - Resultado del acceso
Current
cuando un objeto de enumerador está en los estados anterior, en ejecución o posterior (§15.14.5.3). - Resultado de invocar
Dispose
cuando un objeto enumerador está en estado de ejecución (§15.14.5.4). - Los atributos de un tipo declarado en varias partes se determinan combinando, en un orden no especificado, los atributos de cada una de sus partes (§22.3).
- Orden en el que los miembros se empaquetan en una estructura (§23.6.9).
- Se produce una excepción durante la ejecución del finalizador y esa excepción no se detecta (§21.4).
- Si más de un miembro coincide, qué miembro es la implementación de
I.M
(§18.6.5).
B.5 Otros problemas
- Los resultados exactos de la evaluación de expresiones de punto flotante pueden variar de una implementación a otra, ya que se permite que una implementación evalúe dichas expresiones mediante un intervalo mayor o una precisión de los necesarios (§8.3.7).
- La CLI reserva ciertas firmas para la compatibilidad con otros lenguajes de programación (§15.3.10).
Fin del texto informativo.
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
ECMA C# draft specification