Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta cláusula é informativa.
B.1 Geral
Este anexo recolhe algumas informações sobre a portabilidade que constam desta especificação.
B.2 Comportamento indefinido
O comportamento é indefinido nas seguintes circunstâncias:
- O comportamento da função assíncrona delimitante quando um aguardador implementa os métodos
INotifyCompletion.OnCompletedde interface eICriticalNotifyCompletion.UnsafeOnCompletednão faz com que o delegado de retomada seja invocado no máximo uma vez (§12.9.9.4). - Passando ponteiros como
refououtparâmetros (§24.3.2). - Ao desreferenciar o resultado da conversão de um tipo de ponteiro em outro e o ponteiro resultante não estiver alinhado corretamente para o tipo apontado. (§24.5.1).
- Quando o operador unário
*é aplicado a um ponteiro que contém um valor inválido (§24.6.2). - Quando um ponteiro é subscrito para acessar um elemento fora dos limites (§24.6.4).
- Ao comparar valores de funcptr_types ou
void*cópias dela (§24.6.8. - Modificando objetos de tipo gerenciado por meio de ponteiros fixos (§24.7).
- O conteúdo da memória recém-alocado por
stackalloc(§12.8.22). - Tentando alocar um número negativo de itens usando
stackalloc(§12.8.22). - Conversões dinâmicas implícitas (§10.2.10) de parâmetros de entrada com argumentos de valor (§12.6.4.2).
B.3 Comportamento definido pela implementação
Uma implementação em conformidade é necessária para documentar sua escolha de comportamento em cada uma das áreas listadas nesta subcláusula. Os itens a seguir são definidos pela implementação:
- A manipulação do caractere Unicode NULL (U+0000) em uma unidade de compilação. (§6.1)
- O comportamento quando um identificador que não está no Formulário de Normalização C é encontrado. (§6.4.3)
- O valor máximo permitido para
Decimal_Digit+emPP_Line_Indicator. (§6.5.8) - A interpretação do input_characters no pp_pragma-texto de uma diretiva #pragma. (§6.5.10)
- Os valores de todos os parâmetros do aplicativo passados
Mainpelo ambiente do host antes da inicialização do aplicativo. (§7.1) - O mecanismo para determinar se um programa é compilado como uma biblioteca de classes ou como um aplicativo. (§7.1)
- A política ou os mecanismos usados por uma implementação para a criação e destruição de domínios de aplicativo. (§7.1)
- O código de saída se o método de ponto de entrada efetivo for encerrado devido a uma exceção. (§7.2)
- Se os finalizadores são ou não executados como parte do encerramento do aplicativo. (§7.2, §7.9)
- Se as APIs permitem que um finalizador seja executado mais de uma vez. (§7.9)
- O tamanho e o intervalo de valor dos tipos
nintenuint. (§8.3.6) - A superfície da API fornecida por
Expression<TDelegate>além do requisito de umCompilemétodo. (§8.6) - A estrutura precisa da árvore de expressão, bem como o processo exato para criá-la, quando uma função anônima é convertida em uma árvore de expressão. (§10.7.3)
- O motivo pelo qual uma conversão em um tipo delegado compatível pode falhar em tempo de compilação. (§10.7.3)
- O valor retornado quando uma alocação de pilha de tamanho zero é feita. (§12.8.22)
- Se um
System.ArithmeticException(ou uma subclasse dele) é lançado ou o estouro não é relatado com o valor resultante sendo o do operando esquerdo, quando em umuncheckedcontexto e o operando esquerdo de uma divisão inteira é o valor negativo máximointoulonge o operando direito é–1. (§12.13.3) - Quando a
System.ArithmeticException(ou uma subclasse dela) é lançada ao executar uma operação de resto decimal. (§12.13.4) - O mecanismo para distinguir a assinatura do acessador definido de uma propriedade da de um acessador init (§15.3.10.2).
- O mecanismo para distinguir a assinatura do acessador definido de um indexador da de um acessador de inicialização (§15.3.10.4).
- O impacto do encerramento do thread quando um thread não tem nenhum manipulador para uma exceção e o próprio thread é encerrado. (§13.10.6)
- O mecanismo pelo qual a ligação a um método externo é alcançada. (seção 15.6.8)
- O impacto do encerramento do thread quando nenhuma cláusula correspondente
catché encontrada para uma exceção e o código que iniciou inicialmente esse thread é alcançado. (§22,4). - O mapeamento de nomes de token e a semântica de convenções de chamada não gerenciadas além daquelas exigidas por essa especificação e o conjunto de combinações válidas desses tokens (§24.3.3).
- A ordem de execução de inicializadores de módulo em um módulo (§23.5.9).
- Um ambiente de execução pode fornecer atributos adicionais que afetam a execução de um programa C#. (§23.5.1)
- Os mapeamentos entre ponteiros e inteiros. (§24.5.1)
- O efeito de aplicar o operador unário
*a umnullponteiro. (§24.6.2) - O tipo de exceção gerada quando o primary_expression de um invocation_expression é um ponteiro de função com valor
nulle é feita uma tentativa de invocar o método apontado (inexistente) (§12.8.10). - O comportamento quando a aritmética do ponteiro ultrapassa o domínio do tipo de ponteiro. (§24.6.6, §24.6.7)
- O resultado do
sizeofoperador para tipos de valor não predefinidos. (§24.6.9) - O comportamento da instrução se a expressão de
fixedmatriz fornullou se a matriz tiver zero elementos. (§24,7) - O comportamento da
fixedinstrução se a expressão de cadeia de caracteres fornull. (§24,7) - O valor retornado quando uma alocação de pilha do tamanho zero é feita (§12.8.22).
B.4 Comportamento não especificado
- O nome do método de ponto de entrada gerado para conter instruções de nível superior (§7.1.3).
- O momento em que o finalizador (se houver) de um objeto é executado, uma vez que esse objeto se torna elegível para finalização (§7.9).
- A representação de
true(§8.3.9). - O valor do resultado ao converter valores fora do intervalo de
floatou valores em um tipo integral em umdoublecontexto (unchecked). - O objeto de destino exato e o método de destino do delegado produzido a partir de um anonymous_method_expression contém (§10.7.2).
- O layout das matrizes, exceto em um contexto não seguro (§12.8.17.5).
- Se há alguma maneira de executar o bloco de uma função anônima diferente da avaliação e invocação do lambda_expression ou da expressão anonymous_method (§12.22.3).
- O tempo exato da inicialização do campo estático (§15.5.6.2).
- O resultado da invocação
MoveNextquando um objeto enumerador está em execução (§15.15.5.2). - O resultado do acesso
Currentquando um objeto enumerador está nos estados antes, em execução ou após (§15.15.5.3). - O resultado da invocação
Disposequando um objeto enumerador está no estado em execução (§15.15.5.4). - Os atributos de um tipo declarado em várias partes são determinados combinando, em uma ordem não especificada, os atributos de cada uma de suas partes (§23.3).
- A ordem na qual os membros são empacotados em um struct (§24.6.9).
- Uma exceção ocorre durante a execução do finalizador e essa exceção não é capturada (§22.4).
- Se mais de um membro corresponder, qual membro será a implementação de
I.M(§19.6.5).
B.5 Outras questões
- Os resultados exatos da avaliação de expressão de ponto flutuante podem variar de uma implementação para outra, pois uma implementação tem permissão para avaliar essas expressões usando um intervalo e/ou precisão maior do que o necessário (§8.3.7).
- Determinadas assinaturas são reservadas para compatibilidade com outras linguagens de programação (§15.3.10).
Fim do texto informativo.
ECMA C# draft specification