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:
- Beteendet för den omslutande asynkrona funktionen när en inväntare implementerar gränssnittsmetoderna
INotifyCompletion.OnCompleted
ochICriticalNotifyCompletion.UnsafeOnCompleted
inte gör att återtagandedelegaten anropas högst en gång (§12.9.8.4). - Skicka pekare som referens- eller utdataparametrar (§23.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).
- När den unary
*
operatorn tillämpas på en pekare som innehåller ett ogiltigt värde (§23.6.2). - När en pekare är nedsänkt för att komma åt ett out-of-bounds-element (§23.6.4).
- Ändra objekt av hanterad typ via fasta pekare (§23.7).
- Innehållet i det minne som nyligen allokerats av
stackalloc
(§12.8.21). - Försöker allokera ett negativt antal objekt med hjälp
stackalloc
av (§12.8.21). - 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:
- Hanteringen av Unicode NULL-tecknet (U+0000) i en kompileringsenhet. (§6.1)
- Beteendet när en identifierare som inte finns i normaliseringsformulär C påträffas. (§6.4.3)
- Det maximala värdet som tillåts för
Decimal_Digit+
iPP_Line_Indicator
. (§6.5.8) - Tolkningen av input_characters i pp_pragma-texten i ett #pragma direktiv. (§6.5.10)
- Värdena för alla programparametrar som skickas till
Main
av värdmiljön innan programmet startas. (§7.1) - Mekanismen för att avgöra om ett program kompileras som ett klassbibliotek eller som ett program. (§7.1)
- Den princip eller de mekanismer som används av en implementering för att skapa och förstöra programdomäner. (§7.1)
- Slutkoden om den effektiva startpunktsmetoden avslutas på grund av ett undantag. (§7.2)
- Om slutförare körs som en del av programavslut. (§7.2)
- Om API:er tillåter att en finalator körs mer än en gång. (§7.9)
- Om slutförare körs som en del av programavslut. (§7.9)
- API-ytan som tillhandahålls av
Expression<TDelegate>
utöver kravet på enCompile
metod. (§8.6) - 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)
- Anledningen till att en konvertering till en kompatibel ombudstyp kan misslyckas vid kompilering. (§10.7.3)
- Värdet som returneras när en stackallokering av storlek noll görs. (§12.8.21)
- 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 ettunchecked
sammanhang och den vänstra operanden för en heltalsdivision är det maximala negativaint
värdet ellerlong
värdet och den högra operanden är–1
. (§12.10.3) - När en
System.ArithmeticException
(eller en underklass därav) genereras när en decimal reståtgärd utförs. (§12.10.4) - 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)
- Den mekanism genom vilken länkning till en extern metod uppnås. (§15.6.8)
- 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). - En körningsmiljö kan ge ytterligare attribut som påverkar körningen av ett C#-program. (§22.5.1)
- Mappningarna mellan pekare och heltal. (§23.5.1)
- Effekten av att tillämpa den unary
*
operatorn på ennull
pekare. (§23.6.2) - Beteendet när pekarens aritmetiska spiller över domänen för pekartypen. (§23.6.6, §23.6.7)
- Resultatet av operatorn
sizeof
för icke-fördefinierade värdetyper. (§23.6.9) - Beteendet för -instruktionen
fixed
om matrisuttrycket ärnull
eller om matrisen har noll element. (§23.7) - Beteendet för -instruktionen
fixed
om stränguttrycket ärnull
. (§23.7)
B.4 Ospecificerat beteende
- 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).
- Framställningen av
true
(§8.3.9). - Resultatets värde vid konvertering av värden från
float
eller värden till en integrerad typ i enunchecked
kontext (§10.3.2double
). - Det exakta målobjektet och målmetoden för ombudet som produceras från en anonymous_method_expression innehåller (§10.7.2).
- Matrisernas layout, utom i ett osäkert sammanhang (§12.8.16.5).
- 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).
- Den exakta tidpunkten för initiering av statiska fält (§15.5.6.2).
- Resultatet av att
MoveNext
anropa när ett uppräkningsobjekt körs (§15.14.5.2). - Resultatet av att komma åt
Current
när ett uppräkningsobjekt finns i före-, körnings- eller eftertillstånden (§15.14.5.3). - Resultatet av att
Dispose
anropa när ett uppräkningsobjekt är i körningstillstånd (§15.14.5.4). - 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).
- Ordningen där medlemmarna packas i en struct (§23.6.9).
- Ett undantag inträffar under slutförandekörningen och undantaget fångas inte (§21.4).
- Om fler än en medlem matchar, vilken medlem är implementeringen av
I.M
(§18.6.5).
B.5 Andra problem
- 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).
- CLI reserverar vissa signaturer för kompatibilitet med andra programmeringsspråk (§15.3.10).
Slut på informativ text.
Samarbeta med oss på GitHub
Källan för det här innehållet finns på GitHub, där du även kan skapa och granska ärenden och pull-begäranden. Se vår deltagarguide för mer information.
ECMA C# draft specification