次の方法で共有


付属書 B 移植性の問題

この句は有益です。

B.1 全般

この付属書では、この仕様に記載されている移植性に関するいくつかの情報を収集します。

B.2 未定義の動作

この動作は、次の状況では未定義です。

  1. インターフェイス メソッドの awaiter の実装が INotifyCompletion.OnCompleted し、 ICriticalNotifyCompletion.UnsafeOnCompleted が再開デリゲートを呼び出さない場合の外側の非同期関数の動作は、最大で 1 回呼び出されます (§12.9.8.4)。
  2. 参照パラメーターまたは出力パラメーターとしてポインターを渡す (§23.3)。
  3. あるポインター型を別のポインター型に変換した結果を逆参照すると、結果のポインターがポイント先型に対して正しく配置されません。 (§23.5.1)。
  4. 単項 * 演算子が無効な値を含むポインターに適用される場合 (§23.6.2)。
  5. 境界外の要素 (§23.6.4) にアクセスするためにポインターが添字付きになっている場合。
  6. 固定ポインターを使用したマネージド型のオブジェクトの変更 (§23.7)。
  7. stackallocによって新しく割り当てられたメモリの内容 (§12.8.21)。
  8. stackalloc(§12.8.21) を使用して負の数の項目を割り当てようとしています。
  9. 値引数を持つ入力パラメーターの暗黙的な動的変換 (§10.2.10) (§12.6.4.2)。

B.3 実装定義の動作

このサブドキュメントに記載されている各領域での動作の選択を文書化するには、準拠した実装が必要です。 実装定義を次に示します。

  1. コンパイル単位での Unicode NULL 文字 (U+0000) の処理。 (§6.1)
  2. 正規化フォーム C にない識別子が検出された場合の動作。 (§6.4.3)
  3. PP_Line_IndicatorDecimal_Digit+できる最大値。 (§6.5.8)
  4. #pragma ディレクティブのpp_pragmaテキスト内のinput_charactersの解釈。 (§6.5.10)
  5. アプリケーションの起動前にホスト環境によって Main に渡されるすべてのアプリケーション パラメーターの値。 (§7.1)
  6. プログラムがクラス ライブラリとしてコンパイルされるか、アプリケーションとしてコンパイルされるかを判断するためのメカニズム。 (§7.1)
  7. アプリケーション ドメインの作成と破棄のために実装によって使用されるポリシーまたはメカニズム。 (§7.1)
  8. 例外が原因で有効なエントリ ポイント メソッドが終了した場合の終了コード。 (§7.2)
  9. ファイナライザーがアプリケーションの終了の一部として実行されるかどうか。 (§7.2)
  10. API でファイナライザーの実行を複数回許可するかどうか。 (§7.9)
  11. ファイナライザーがアプリケーションの終了の一部として実行されるかどうか。 (§7.9)
  12. Expression<TDelegate>によって提供される API サーフェスは、Compile メソッドの要件を超えています。 (§8.6)
  13. 匿名関数が式ツリーに変換されるときの式ツリーの正確な構造と、それを作成するための正確なプロセス。 (§10.7.3)
  14. 互換性のあるデリゲート型への変換がコンパイル時に失敗する可能性がある理由。 (§10.7.3)
  15. サイズ 0 のスタック割り当てが行われたときに返される値。 (§12.8.21)
  16. System.ArithmeticException (またはそのサブクラス) がスローされるか、オーバーフローが左オペランドの値と共にレポートされない場合でも、uncheckedコンテキストで整数除算の左オペランドが最大負のintまたはlong値であり、右側のオペランドが–1場合。 (§12.10.3)
  17. 10 進剰余演算を実行するときに、 System.ArithmeticException (またはそのサブクラス) がスローされた場合。 (§12.10.4)
  18. スレッドに例外のハンドラーがなく、スレッド自体が終了した場合のスレッド終了の影響。 (§13.10.6)
  19. 外部メソッドへのリンケージを実現するメカニズム。 (§15.6.8)
  20. 例外に対して一致する catch 句が見つかり、そのスレッドを最初に開始したコードに達した場合のスレッド終了の影響。 (§21.4)。
  21. 実行環境には、C# プログラムの実行に影響する追加の属性が用意されている場合があります。 (§22.5.1)
  22. ポインターと整数の間のマッピング。 (§23.5.1)
  23. 単項 * 演算子を null ポインターに適用した場合の効果。 (§23.6.2)
  24. ポインターの算術演算がポインター型のドメインをオーバーフローしたときの動作。 (§23.6.6, §23.6.7)
  25. 定義済みでない値型の sizeof 演算子の結果。 (§23.6.9)
  26. 配列式がnullされている場合、または配列に 0 個の要素がある場合の、fixed ステートメントの動作。 (§23.7)
  27. 文字列式がnullされている場合のfixed ステートメントの動作。 (§23.7)

B.4 未指定の動作

  1. オブジェクトのファイナライザー (ある場合) が実行される時刻。そのオブジェクトが最終処理の対象になった時点 (§7.9)。
  2. trueの表現 (§8.3.9)。
  3. 範囲外の値を float または double の値から unchecked コンテキストの整数型に変換するときの結果の値 (§10.3.2)。
  4. anonymous_method_expressionから生成されたデリゲートの正確なターゲット オブジェクトとターゲット メソッドに含まれる (§10.7.2)。
  5. アンセーフ コンテキストを除く配列のレイアウト (§12.8.16.5)。
  6. lambda_expressionまたはanonymous_method式の評価と呼び出し以外の匿名関数のblockを実行する方法があるかどうか (§12.19.3)。
  7. 静的フィールド初期化の正確なタイミング (§15.5.6.2)。
  8. 列挙子オブジェクトが実行されているときに MoveNext を呼び出した結果 (§15.14.5.2)。
  9. 列挙子オブジェクトが前、実行中、または後の状態 (§15.14.5.3) にある場合にCurrentにアクセスした結果。
  10. 列挙子オブジェクトが実行中の状態のときに Dispose を呼び出した結果 (§15.14.5.4)。
  11. 複数の部分で宣言された型の属性は、各部分の属性 (§22.3) を不特定の順序で組み合わせることによって決定されます。
  12. メンバーが構造体にパックされる順序 (§23.6.9)。
  13. ファイナライザーの実行中に例外が発生し、その例外はキャッチされません (§21.4)。
  14. 複数のメンバーが一致する場合、どのメンバーが I.M の実装です (§18.6.5)。

B.5 その他の問題

  1. 浮動小数点式の評価の正確な結果は実装によって異なる場合があります。実装では、必要以上の範囲や精度を使用してこのような式を評価することが許可されるためです (§8.3.7)。
  2. CLI は、他のプログラミング言語との互換性のために特定の署名を予約します (§15.3.10)。

情報テキストの末尾。