Sdílet prostřednictvím


Problémy s přenositelností přílohy B

Tato klauzule je informativní.

B.1 Obecné

Tato příloha shromažďuje některé informace o přenositelnosti, které jsou uvedeny v této specifikaci.

B.2 Nedefinované chování

Chování není definováno za následujících okolností:

  1. Chování ohraničující asynchronní funkce při implementaci metod INotifyCompletion.OnCompleted rozhraní awaiterem a ICriticalNotifyCompletion.UnsafeOnCompleted nezpůsobí vyvolání delegáta obnovení najednou (§12.9.8.4).
  2. Předávání ukazatelů jako referenčních nebo výstupních parametrů (§23.3).
  3. Při dereferencování výsledku převodu jednoho typu ukazatele na jiný a výsledný ukazatel není správně zarovnaný pro typ s odkazem na typ. (§23.5.1).
  4. Pokud je unární * operátor použit na ukazatel obsahující neplatnou hodnotu (§23.6.2).
  5. Pokud je ukazatel dolní index pro přístup k prvku mimo hranice (§23.6.4).
  6. Úprava objektů spravovaného typu pomocí pevných ukazatelů (§23.7).
  7. Obsah paměti nově přidělený stackalloc (§12.8.21).
  8. Pokus o přidělení záporného počtu položek pomocí stackalloc§12.8.21).
  9. Implicitní dynamické převody (§10.2.10) vstupních parametrů s argumenty hodnoty (§12.6.4.2).

B.3 Chování definované implementací

Ke zdokumentování volby chování v každé z oblastí uvedených v této dílčí části se vyžaduje odpovídající implementace. Následující definice je definována implementací:

  1. Zpracování znaku Unicode NULL (U+0000) v kompilační jednotce. (§6.1)
  2. Chování, pokud je zjištěn identifikátor, který není v normalizačním formuláři C. (§6.4.3)
  3. Maximální hodnota povolená pro Decimal_Digit+ hodnotu in PP_Line_Indicator. (§6.5.8)
  4. Interpretace input_characters v pp_pragma textu direktivy #pragma. (§6.5.10)
  5. Hodnoty všech parametrů aplikace předané Main hostitelským prostředím před spuštěním aplikace. (§7.1)
  6. Mechanismus pro určení, zda je program zkompilován jako knihovna tříd nebo jako aplikace. (§7.1)
  7. Zásady nebo mechanismy používané implementací pro vytváření a zničení domén aplikací. (§7.1)
  8. Ukončovací kód, pokud efektivní metoda vstupního bodu skončí kvůli výjimce. (§7.2)
  9. Zda jsou finalizátory spuštěny jako součást ukončení aplikace. (§7.2)
  10. Určuje, jestli rozhraní API umožňují více než jednou spustit finalizační metodu. (§7.9)
  11. Zda jsou finalizátory spuštěny jako součást ukončení aplikace. (§7.9)
  12. Povrch rozhraní API poskytovaný Expression<TDelegate> nad rámec požadavku na metodu Compile . (§8.6)
  13. Přesná struktura stromu výrazů a přesný proces jeho vytvoření při převodu anonymní funkce na strom výrazu. (§10.7.3)
  14. Důvod převodu na kompatibilní typ delegáta může v době kompilace selhat. (§10.7.3)
  15. Hodnota vrácená při přidělení velikosti zásobníku nula je provedena. (§12.8.21)
  16. System.ArithmeticException Zda je vyvolána (nebo podtřída) nebo přetečení se nepřetečení nevysestavuje s výslednou hodnotou, která je výsledkem levého operandu, pokud v unchecked kontextu a levém operandu celočíselného dělení je maximální záporná int hodnota nebo long hodnota a pravý operand je –1. (§12.10.3)
  17. System.ArithmeticException Když je vyvolán (nebo podtřída) při provádění desetinné operace zbytek. (§12.10.4)
  18. Dopad ukončení vlákna, pokud vlákno nemá žádnou obslužnou rutinu pro výjimku a vlákno je samo ukončeno. (§13.10.6)
  19. Mechanismus, kterým je dosaženo propojení s externí metodou. (§15.6.8)
  20. Dopad ukončení vlákna, pokud nebyla nalezena žádná odpovídající catch klauzule pro výjimku a kód, který původně spustil toto vlákno, je dosaženo. (§21.4).
  21. Spouštěcí prostředí může poskytovat další atributy, které ovlivňují provádění programu jazyka C#. (§22.5.1)
  22. Mapování mezi ukazateli a celými čísly. (§23.5.1)
  23. Účinek použití unárního * operátoru null na ukazatel. (§23.6.2)
  24. Chování při aritmetické přetečení ukazatele domény typu ukazatele. (§23.6.6, §23.6.7)
  25. Výsledek operátoru sizeof pro nedefinované typy hodnot. (§23.6.9)
  26. Chování fixed příkazu, pokud je null maticový výraz nebo pokud má matice nula prvků. (§23.7)
  27. Chování fixed příkazu, pokud je nullřetězcový výraz . (§23.7)

B.4 Nespecifikované chování

  1. Čas spuštění finalizátoru (pokud existuje) objektu, jakmile se tento objekt stane způsobilým k dokončení (§7.9).
  2. Vyjádření true (§8.3.9).
  3. Hodnota výsledku při převodu hodnot mimo rozsah nebo float double hodnot na celočíselný typ v unchecked kontextu (§10.3.2).
  4. Přesný cílový objekt a cílová metoda delegáta vytvořeného z anonymous_method_expression obsahuje (§10.7.2).
  5. Rozložení polí s výjimkou nebezpečného kontextu (§12.8.16.5).
  6. Zda existuje nějaký způsob, jak provést blok anonymní funkce jiné než prostřednictvím vyhodnocení a vyvolání lambda_expression nebo anonymous_method-výraz (§12.19.3).
  7. Přesné načasování inicializace statického pole (§15.5.6.2).
  8. Výsledek vyvolání MoveNext při spuštění objektu výčtu (§15.14.5.2).
  9. Výsledek přístupu k Current objektu enumerátoru je v před, spuštěném nebo po stavu (§15.14.5.3).
  10. Výsledek vyvolání Dispose objektu výčtu je ve spuštěném stavu (§15.14.5.4).
  11. Atributy typu deklarované ve více částech jsou určeny kombinováním atributů jednotlivých částí v nezadaném pořadí (§22.3).
  12. Pořadí, ve kterém jsou členové zabaleni do struktury (§23.6.9).
  13. Při provádění finalizátoru dojde k výjimce a tato výjimka se nezachytí (§21.4).
  14. Pokud se shoduje více než jeden člen, který člen je provedením I.M (§18.6.5).

B.5 Další problémy

  1. Přesné výsledky vyhodnocení výrazu s plovoucí desetinnou čárkou se mohou lišit od jedné implementace po druhé, protože implementace je povolena k vyhodnocení těchto výrazů pomocí většího rozsahu a/nebo přesnosti, než je vyžadováno (§8.3.7).
  2. Rozhraní příkazového řádku si vyhrazuje určité podpisy pro kompatibilitu s jinými programovacími jazyky (§15.3.10).

Konec informativního textu