Dela via


Problem med portabilitet i bilaga B

Den här satsen är informativ.

B.1 Allmänt

Denna bilaga samlar in viss information om portabilitet som förekommer i denna specifikation.

B.2 Odefinierat beteende

Beteendet är odefinierat under följande omständigheter:

  1. Beteendet för den omslutande asynkrona funktionen när en inväntare implementerar gränssnittsmetoderna INotifyCompletion.OnCompleted och ICriticalNotifyCompletion.UnsafeOnCompleted inte gör att återtagandedelegaten anropas högst en gång (§12.9.8.4).
  2. Skicka pekare som referens- eller utdataparametrar (§23.3).
  3. När du avrefererar resultatet av att konvertera en pekartyp till en annan och den resulterande pekaren inte är korrekt justerad för den spetsiga typen. (§23.5.1).
  4. När den unary * operatorn tillämpas på en pekare som innehåller ett ogiltigt värde (§23.6.2).
  5. När en pekare är nedsänkt för att komma åt ett out-of-bounds-element (§23.6.4).
  6. Ändra objekt av hanterad typ via fasta pekare (§23.7).
  7. Innehållet i det minne som nyligen allokerats av stackalloc (§12.8.21).
  8. Försöker allokera ett negativt antal objekt med hjälp stackallocav (§12.8.21).
  9. Implicita dynamiska konverteringar (§10.2.10) av indataparametrar med värdeargument (§12.6.4.2).

B.3 Implementeringsdefinierat beteende

En implementering som överensstämmer krävs för att dokumentera dess beteendeval i vart och ett av de områden som anges i den här underklienten. Följande är implementeringsdefinierade:

  1. Hanteringen av Unicode NULL-tecknet (U+0000) i en kompileringsenhet. (§6.1)
  2. Beteendet när en identifierare som inte finns i normaliseringsformulär C påträffas. (§6.4.3)
  3. Det maximala värdet som tillåts för Decimal_Digit+ i PP_Line_Indicator. (§6.5.8)
  4. Tolkningen av input_characters i pp_pragma-texten i ett #pragma direktiv. (§6.5.10)
  5. Värdena för alla programparametrar som skickas till Main av värdmiljön innan programmet startas. (§7.1)
  6. Mekanismen för att avgöra om ett program kompileras som ett klassbibliotek eller som ett program. (§7.1)
  7. Den princip eller de mekanismer som används av en implementering för att skapa och förstöra programdomäner. (§7.1)
  8. Slutkoden om den effektiva startpunktsmetoden avslutas på grund av ett undantag. (§7.2)
  9. Om slutförare körs som en del av programavslut. (§7.2)
  10. Om API:er tillåter att en finalator körs mer än en gång. (§7.9)
  11. Om slutförare körs som en del av programavslut. (§7.9)
  12. API-ytan som tillhandahålls av Expression<TDelegate> utöver kravet på en Compile metod. (§8.6)
  13. Den exakta strukturen för uttrycksträdet, samt den exakta processen för att skapa det, när en anonym funktion konverteras till ett uttrycksträd. (§10.7.3)
  14. Anledningen till att en konvertering till en kompatibel ombudstyp kan misslyckas vid kompilering. (§10.7.3)
  15. Värdet som returneras när en stackallokering av storlek noll görs. (§12.8.21)
  16. Om en System.ArithmeticException (eller en underklass därav) genereras eller om spillet inte rapporteras med det resulterande värdet som den vänstra operandens, när i ett unchecked sammanhang och den vänstra operanden för en heltalsdivision är det maximala negativa int värdet eller long värdet och den högra operanden är –1. (§12.10.3)
  17. När en System.ArithmeticException (eller en underklass därav) genereras när en decimal reståtgärd utförs. (§12.10.4)
  18. Effekten av trådavslut när en tråd inte har någon hanterare för ett undantag och tråden avslutas. (§13.10.6)
  19. Den mekanism genom vilken länkning till en extern metod uppnås. (§15.6.8)
  20. Effekten av trådavslutning när ingen matchande catch sats hittas för ett undantag och koden som ursprungligen startade tråden nås. (§21.4).
  21. En körningsmiljö kan ge ytterligare attribut som påverkar körningen av ett C#-program. (§22.5.1)
  22. Mappningarna mellan pekare och heltal. (§23.5.1)
  23. Effekten av att tillämpa den unary * operatorn på en null pekare. (§23.6.2)
  24. Beteendet när pekarens aritmetiska spiller över domänen för pekartypen. (§23.6.6, §23.6.7)
  25. Resultatet av operatorn sizeof för icke-fördefinierade värdetyper. (§23.6.9)
  26. Beteendet för -instruktionen fixed om matrisuttrycket är null eller om matrisen har noll element. (§23.7)
  27. Beteendet för -instruktionen fixed om stränguttrycket är null. (§23.7)

B.4 Ospecificerat beteende

  1. Den tid då slutföraren (om någon) för ett objekt körs, när objektet har blivit berättigat till slutförande (§7.9).
  2. Framställningen av true (§8.3.9).
  3. Resultatets värde vid konvertering av värden från float eller värden till en integrerad typ i en unchecked kontext (§10.3.2double).
  4. Det exakta målobjektet och målmetoden för ombudet som produceras från en anonymous_method_expression innehåller (§10.7.2).
  5. Matrisernas layout, utom i ett osäkert sammanhang (§12.8.16.5).
  6. Om det finns något sätt att köra blocket för en anonym funktion förutom genom utvärdering och anrop av lambda_expression eller anonymous_method-uttryck (§12.19.3).
  7. Den exakta tidpunkten för initiering av statiska fält (§15.5.6.2).
  8. Resultatet av att MoveNext anropa när ett uppräkningsobjekt körs (§15.14.5.2).
  9. Resultatet av att komma åt Current när ett uppräkningsobjekt finns i före-, körnings- eller eftertillstånden (§15.14.5.3).
  10. Resultatet av att Dispose anropa när ett uppräkningsobjekt är i körningstillstånd (§15.14.5.4).
  11. Attributen för en typ som deklareras i flera delar bestäms genom att i en ospecificerad ordning kombinera attributen för var och en av dess delar (§22.3).
  12. Ordningen där medlemmarna packas i en struct (§23.6.9).
  13. Ett undantag inträffar under slutförandekörningen och undantaget fångas inte (§21.4).
  14. Om fler än en medlem matchar, vilken medlem är implementeringen av I.M (§18.6.5).

B.5 Andra problem

  1. De exakta resultaten av utvärderingen av flyttalsuttryck kan variera från en implementering till en annan, eftersom en implementering tillåts utvärdera sådana uttryck med ett större intervall och/eller precision än vad som krävs (§8.3.7).
  2. CLI reserverar vissa signaturer för kompatibilitet med andra programmeringsspråk (§15.3.10).

Slut på informativ text.