Problemi di portabilità dell'allegato B
Questa clausola è informativa.
B.1 Generale
Questo allegato raccoglie alcune informazioni sulla portabilità visualizzate in questa specifica.
B.2 Comportamento non definito
Il comportamento non è definito nelle circostanze seguenti:
- Comportamento della funzione asincrona di inclusione quando l'implementazione di un awaiter dei metodi
INotifyCompletion.OnCompleted
di interfaccia eICriticalNotifyCompletion.UnsafeOnCompleted
non fa sì che il delegato di ripresa venga richiamato al massimo una volta (§12.9.8.4). - Passaggio di puntatori come parametri di riferimento o di output (§23.3).
- Quando si dereferenzia il risultato della conversione di un tipo di puntatore a un altro e il puntatore risultante non è allineato correttamente per il tipo puntato. (§23.5.1).
- Quando l'operatore unario
*
viene applicato a un puntatore contenente un valore non valido (§23.6.2). - Quando un puntatore è sottoscritto per accedere a un elemento out-of-bounds (§23.6.4).
- Modifica di oggetti di tipo gestito tramite puntatori fissi (§23.7).
- Contenuto della memoria appena allocata da
stackalloc
(§12.8.21). - Tentativo di allocare un numero negativo di elementi utilizzando
stackalloc
(§12.8.21). - Conversioni dinamiche implicite (§10.2.10) di parametri di input con argomenti valore (§12.6.4.2).
B.3 Comportamento definito dall'implementazione
È necessaria un'implementazione conforme per documentare la scelta del comportamento in ognuna delle aree elencate in questa sottochiave. Di seguito sono riportati i valori definiti dall'implementazione:
- Gestione del carattere NULL Unicode (U+0000) in un'unità di compilazione. (§6.1)
- Comportamento quando viene rilevato un identificatore non nel formato di normalizzazione C. (§6.4.3)
- Valore massimo consentito per
Decimal_Digit+
inPP_Line_Indicator
. (§6.5.8) - L'interpretazione del input_characters nel testo pp_pragma di una direttiva #pragma. (§6.5.10)
- Valori di tutti i parametri dell'applicazione passati dall'ambiente
Main
host prima dell'avvio dell'applicazione. (§7.1) - Meccanismo per determinare se un programma viene compilato come libreria di classi o come applicazione. (§7.1)
- Criteri o meccanismi usati da un'implementazione per la creazione e la distruzione dei domini applicazione. (§7.1)
- Codice di uscita se il metodo del punto di ingresso effettivo termina a causa di un'eccezione. (§7.2)
- Indica se i finalizzatori vengono eseguiti come parte della terminazione dell'applicazione. (§7.2)
- Indica se le API consentono l'esecuzione di un finalizzatore più volte. (§7.9)
- Indica se i finalizzatori vengono eseguiti come parte della terminazione dell'applicazione. (§7.9)
- Superficie API fornita da
Expression<TDelegate>
oltre il requisito per unCompile
metodo. (§8.6) - Struttura precisa dell'albero delle espressioni, nonché il processo esatto per la creazione, quando una funzione anonima viene convertita in un albero delle espressioni. (§10.7.3)
- Il motivo per cui una conversione a un tipo delegato compatibile potrebbe non riuscire in fase di compilazione. (§10.7.3)
- Valore restituito quando viene eseguita un'allocazione dello stack di dimensioni pari a zero. (§12.8.21)
- Se viene
System.ArithmeticException
generata una sottoclasse (o una sottoclasse) o se l'overflow viene dereportato con il valore risultante come quello dell'operando sinistro, quando in ununchecked
contesto e l'operando sinistro di una divisione integer è il valore negativo olong
massimoint
e l'operando destro è–1
. (§12.10.3) - Quando viene generata una
System.ArithmeticException
sottoclasse (o una sottoclasse) quando si esegue un'operazione di resto decimale. (§12.10.4) - L'impatto della terminazione del thread quando un thread non ha alcun gestore per un'eccezione e il thread viene terminato. (§13.10.6)
- Meccanismo mediante il quale viene ottenuto il collegamento a un metodo esterno. (§15.6.8)
- L'impatto della terminazione del thread quando non viene trovata alcuna clausola corrispondente
catch
per un'eccezione e il codice che inizialmente ha avviato tale thread viene raggiunto. (§21.4). - Un ambiente di esecuzione può fornire attributi aggiuntivi che influiscono sull'esecuzione di un programma C#. (§22.5.1)
- Mapping tra puntatori e interi. (§23.5.1)
- Effetto dell'applicazione dell'operatore unario
*
a unnull
puntatore. (§23.6.2) - Comportamento quando il puntatore esegue l'overflow aritmetico del dominio del tipo di puntatore. (§23.6.6, §23.6.7)
- Risultato dell'operatore
sizeof
per i tipi valore non definiti. (§23.6.9) - Comportamento dell'istruzione se l'espressione
fixed
di matrice ènull
o se la matrice contiene zero elementi. (§23.7) - Comportamento dell'istruzione se l'espressione
fixed
stringa ènull
. (§23.7)
B.4 Comportamento non specificato
- Ora in cui viene eseguito il finalizzatore (se presente) per un oggetto, una volta che tale oggetto è diventato idoneo per la finalizzazione (§7.9).
- Rappresentazione di
true
(§8.3.9). - Valore del risultato durante la conversione di valori out-of-range da
float
o valori in un tipo integrale in ununchecked
contesto (§10.3.2double
). - L'oggetto di destinazione esatto e il metodo di destinazione del delegato prodotto da un anonymous_method_expression contiene (§10.7.2).
- Layout di matrici, ad eccezione di un contesto non sicuro (§12.8.16.5).
- Indica se esiste un modo per eseguire il blocco di una funzione anonima diversa da tramite la valutazione e la chiamata del lambda_expression o anonymous_method-expression (§12.19.3).
- Intervallo esatto di inizializzazione dei campi statici (§15.5.6.2).
- Risultato della chiamata
MoveNext
di un oggetto enumeratore (§15.14.5.2). - Risultato dell'accesso
Current
quando un oggetto enumeratore si trova negli stati precedenti, in esecuzione o successivi (§15.14.5.3). - Risultato della chiamata
Dispose
di un oggetto enumeratore nello stato di esecuzione (§15.14.5.4). - Gli attributi di un tipo dichiarato in più parti sono determinati combinando, in un ordine non specificato, gli attributi di ognuna delle relative parti (§22.3).
- Ordine in cui i membri vengono compressi in uno struct (§23.6.9).
- Si verifica un'eccezione durante l'esecuzione del finalizzatore e tale eccezione non viene intercettata (§21.4).
- Se più membri corrispondono, quale membro è l'implementazione di
I.M
(§18.6.5).
B.5 Altri problemi
- I risultati esatti della valutazione dell'espressione a virgola mobile possono variare da un'implementazione a un'altra, perché un'implementazione è autorizzata a valutare tali espressioni usando un intervallo e/o una precisione maggiore rispetto a quanto richiesto (§8.3.7).
- L'interfaccia della riga di comando riserva alcune firme per la compatibilità con altri linguaggi di programmazione (§15.3.10).
Fine del testo informativo.
Collabora con noi su GitHub
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
ECMA C# draft specification