共用方式為


附錄 B 可移植性問題

這個子句具有資訊性。

B.1 一般

本附錄會收集此規格中出現的一些可移植性相關信息。

B.2 未定義的行為

在下列情況下,行為未定義:

  1. 當等候程式實作介面方法 INotifyCompletion.OnCompleted 時,封入異步函式的行為,而且 ICriticalNotifyCompletion.UnsafeOnCompleted 不會讓恢復委派最多叫用一次(~12.9.8.4)。
  2. 傳遞指標作為參考或輸出參數 (~23.3)。
  3. 當取值將一個指標類型轉換成另一個指標類型的結果,且結果指標未正確對齊指向類型時。 (~23.5.1)。
  4. 當一元 * 運算子套用至包含無效值的指標時(^23.6.2)。
  5. 當指標被下標以存取超出界限的元素時(~23.6.4)。
  6. 透過固定指標修改 Managed 類型的物件(~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+00000) 的處理。 (~6.1
  2. 遇到不在正規化表單 C 中的標識碼時的行為。 (~6.4.3
  3. PP_Line_Indicator允許Decimal_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. 建立大小為零的堆疊配置時所傳回的值。 (•12.8.21
  16. 無論擲 System.ArithmeticException 回 (或子類別),或是溢位未報告,產生的值為左操作數,當 unchecked 在內容中和整數除法的左操作數是負數 intlong 值上限,而右操作數為 –1時。 (~12.10.3
  17. 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 或陣列有零個元素,則為語句的行為fixed。 (~23.7
  27. 如果字串表示式為 null,則為語句的行為fixed。 (~23.7

B.4 未指定的行為

  1. 執行物件的完成項(如果有的話)的時間,一旦該對象有資格進行最終化(~7.9)。
  2. ~8.3.9) 的true表示法。
  3. 將超出範圍值或值轉換成內容中整數型別時的結果值floatdouble~10.3.2)。unchecked
  4. anonymous_method_expression 產生之委派的確切目標對象和目標方法包含 (~10.7.2)。
  5. 陣列的配置,但不安全的內容除外(\12.8.16.5)。
  6. 除了透過lambda_expression的評估與調用,或anonymous_method表達式(~12.19.3)之外,是否有任何方法可以執行匿名函式的區塊。
  7. 靜態字段初始化的確切時間(~15.5.6.2)。
  8. 列舉值物件執行時叫用的結果 MoveNext~15.14.5.2)。
  9. 列舉值物件在之前、執行中或狀態之後存取的結果 Current~15.14.5.3)。
  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) 相容。

信息文字結尾。