Condividi tramite


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:

  1. Comportamento della funzione asincrona di inclusione quando l'implementazione di un awaiter dei metodi INotifyCompletion.OnCompleted di interfaccia e ICriticalNotifyCompletion.UnsafeOnCompleted non fa sì che il delegato di ripresa venga richiamato al massimo una volta (§12.9.8.4).
  2. Passaggio di puntatori come parametri di riferimento o di output (§23.3).
  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).
  4. Quando l'operatore unario * viene applicato a un puntatore contenente un valore non valido (§23.6.2).
  5. Quando un puntatore è sottoscritto per accedere a un elemento out-of-bounds (§23.6.4).
  6. Modifica di oggetti di tipo gestito tramite puntatori fissi (§23.7).
  7. Contenuto della memoria appena allocata da stackalloc (§12.8.21).
  8. Tentativo di allocare un numero negativo di elementi utilizzando stackalloc(§12.8.21).
  9. 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:

  1. Gestione del carattere NULL Unicode (U+0000) in un'unità di compilazione. (§6.1)
  2. Comportamento quando viene rilevato un identificatore non nel formato di normalizzazione C. (§6.4.3)
  3. Valore massimo consentito per Decimal_Digit+ in PP_Line_Indicator. (§6.5.8)
  4. L'interpretazione del input_characters nel testo pp_pragma di una direttiva #pragma. (§6.5.10)
  5. Valori di tutti i parametri dell'applicazione passati dall'ambiente Main host prima dell'avvio dell'applicazione. (§7.1)
  6. Meccanismo per determinare se un programma viene compilato come libreria di classi o come applicazione. (§7.1)
  7. Criteri o meccanismi usati da un'implementazione per la creazione e la distruzione dei domini applicazione. (§7.1)
  8. Codice di uscita se il metodo del punto di ingresso effettivo termina a causa di un'eccezione. (§7.2)
  9. Indica se i finalizzatori vengono eseguiti come parte della terminazione dell'applicazione. (§7.2)
  10. Indica se le API consentono l'esecuzione di un finalizzatore più volte. (§7.9)
  11. Indica se i finalizzatori vengono eseguiti come parte della terminazione dell'applicazione. (§7.9)
  12. Superficie API fornita da Expression<TDelegate> oltre il requisito per un Compile metodo. (§8.6)
  13. 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)
  14. Il motivo per cui una conversione a un tipo delegato compatibile potrebbe non riuscire in fase di compilazione. (§10.7.3)
  15. Valore restituito quando viene eseguita un'allocazione dello stack di dimensioni pari a zero. (§12.8.21)
  16. 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 un unchecked contesto e l'operando sinistro di una divisione integer è il valore negativo o long massimo int e l'operando destro è –1. (§12.10.3)
  17. Quando viene generata una System.ArithmeticException sottoclasse (o una sottoclasse) quando si esegue un'operazione di resto decimale. (§12.10.4)
  18. L'impatto della terminazione del thread quando un thread non ha alcun gestore per un'eccezione e il thread viene terminato. (§13.10.6)
  19. Meccanismo mediante il quale viene ottenuto il collegamento a un metodo esterno. (§15.6.8)
  20. 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).
  21. Un ambiente di esecuzione può fornire attributi aggiuntivi che influiscono sull'esecuzione di un programma C#. (§22.5.1)
  22. Mapping tra puntatori e interi. (§23.5.1)
  23. Effetto dell'applicazione dell'operatore unario * a un null puntatore. (§23.6.2)
  24. Comportamento quando il puntatore esegue l'overflow aritmetico del dominio del tipo di puntatore. (§23.6.6, §23.6.7)
  25. Risultato dell'operatore sizeof per i tipi valore non definiti. (§23.6.9)
  26. Comportamento dell'istruzione se l'espressione fixed di matrice è null o se la matrice contiene zero elementi. (§23.7)
  27. Comportamento dell'istruzione se l'espressione fixed stringa è null. (§23.7)

B.4 Comportamento non specificato

  1. Ora in cui viene eseguito il finalizzatore (se presente) per un oggetto, una volta che tale oggetto è diventato idoneo per la finalizzazione (§7.9).
  2. Rappresentazione di true (§8.3.9).
  3. Valore del risultato durante la conversione di valori out-of-range da float o valori in un tipo integrale in un unchecked contesto (§10.3.2double).
  4. L'oggetto di destinazione esatto e il metodo di destinazione del delegato prodotto da un anonymous_method_expression contiene (§10.7.2).
  5. Layout di matrici, ad eccezione di un contesto non sicuro (§12.8.16.5).
  6. 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).
  7. Intervallo esatto di inizializzazione dei campi statici (§15.5.6.2).
  8. Risultato della chiamata MoveNext di un oggetto enumeratore (§15.14.5.2).
  9. Risultato dell'accesso Current quando un oggetto enumeratore si trova negli stati precedenti, in esecuzione o successivi (§15.14.5.3).
  10. Risultato della chiamata Dispose di un oggetto enumeratore nello stato di esecuzione (§15.14.5.4).
  11. 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).
  12. Ordine in cui i membri vengono compressi in uno struct (§23.6.9).
  13. Si verifica un'eccezione durante l'esecuzione del finalizzatore e tale eccezione non viene intercettata (§21.4).
  14. Se più membri corrispondono, quale membro è l'implementazione di I.M (§18.6.5).

B.5 Altri problemi

  1. 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).
  2. L'interfaccia della riga di comando riserva alcune firme per la compatibilità con altri linguaggi di programmazione (§15.3.10).

Fine del testo informativo.