附錄 B 可移植性問題

這個子句具有資訊性。

B.1 一般

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

B.2 未定義的行為

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

  1. 等候者實作介面方法INotifyCompletion.OnCompletedICriticalNotifyCompletion.UnsafeOnCompleted時,封閉非同步函式的行為,不會導致最多叫用一次繼續委派 (§12.9.9.4)。
  2. 以參數ref形式傳遞指標out(§24.3.2)。
  3. 當取值將一個指標類型轉換成另一個指標類型的結果,且結果指標未正確對齊指向類型時。 (第 24.5.1 條)。
  4. 當一元 * 運算子套用至包含無效值的指標時 (§24.6.2)。
  5. 當指標下標以存取越界元素時 (§24.6.4)。
  6. 在比較 funcptr_types 或 void* 其副本的價值時(§24.6.8.
  7. 透過固定指標修改受控類型的物件 (§24.7)。
  8. 新配置的 stackalloc 記憶體內容(§12.8.22)。
  9. 嘗試使用 stackalloc(§12.8.22) 配置負數的項目。
  10. 具有值自變數的輸入參數隱含動態轉換 (~10.2.10) (\12.6.4.2)。

B.3 實作定義的行為

必須有一個符合規範的實作,才能記錄其在這個子程式所列的每個區域中的行為選擇。 以下是實作定義的:

  1. 編譯單位中 Unicode NULL 字元 (U+00000) 的處理。 (~6.1)
  2. 遇到不在正規化表單 C 中的標識碼時的行為。 (~6.4.3)
  3. 中Decimal_Digit+允許PP_Line_Indicator的最大值。 (•6.5.8)
  4. #pragma 指示詞之pp_pragma文字中的input_characters解譯。 (~6.5.10)
  5. 任何應用程式參數的值,即在應用程式啟動前由主機環境傳遞給應用程式入口點方法的值。 (~7.1)
  6. 判斷程式是否編譯為類別庫或應用程式的機制。 (~7.1)
  7. 實作用來建立和銷毀應用程式域的原則或機制。 (~7.1)
  8. 如果應用程式因例外而終止,則使用退出碼。 (~7.1)
  9. 是否執行完成項做為應用程式終止的一部分。 (§7.1, §7.8)
  10. API 是否允許執行完成項多次。 (第7.8節)
  11. 類型與nint的大小與值範圍nuint。 (§8.3.6)
  12. 所提供的 Expression<TDelegate> API 介面超出方法的需求 Compile 。 (~8.6)
  13. 當匿名函式轉換成表達式樹狀結構時,表達式樹狀結構的精確結構,以及建立它的確切程式。 (~10.7.3)
  14. 轉換至相容委派類型的原因,在編譯階段可能會失敗。 (~10.7.3)
  15. 建立大小為零的堆疊配置時所傳回的值。 (§12.8.22)
  16. 無論擲 System.ArithmeticException 回 (或子類別),或是溢位未報告,產生的值為左操作數,當 unchecked 在內容中和整數除法的左操作數是負數 int 或 long 值上限,而右操作數為 –1時。 (§12.13.3)
  17. System.ArithmeticException 執行小數餘數運算時,會擲回 (或子類別)。 (§12.13.4)
  18. 區分屬性集合存取器簽名與初始化存取器簽名的機制(§15.3.10.2)。
  19. 區分索引器集合存取者簽名與初始化存取器簽名的機制(§15.3.10.4)。
  20. 當線程沒有例外狀況的處理程式,且線程本身已終止時,線程終止的影響。 (~13.10.6)
  21. 達成與外部方法連結的機制。 (~15.6.8)
  22. 找不到例外狀況的相符 catch 子句,以及一開始啟動該線程的程序代碼時,線程終止的影響。 (第 22.4 條)。
  23. 超出本規範要求的非管理呼叫慣例的標記名稱映射與語意,以及這些標記的有效組合集合(§24.3.3)。
  24. 模組初始化器的執行順序(§23.5.11)。
  25. 執行環境可能會提供影響 C# 程式執行的其他屬性。 (~23.5.1)
  26. 指標與整數之間的對應。 (第 24.5.1 條)
  27. 將一元 * 運算子套用至 null 指標的效果。 (第 24.6.2 條)
  28. 當invocation_expression primary_expression為函null式指標時拋出的例外類型,並嘗試呼叫(不存在的)指向方法(§12.8.10)。
  29. 指標算術溢位指標類型的定義域時的行為。 (第 24.6.6 條、 第 24.6.7 條)
  30. 非預先定義實值型別之 sizeof 運算子的結果。 (第 24.6.9 條)
  31. 如果陣語表達式為 fixed 或陣列有零個元素,則為語句的行為null。 (第 24.7 條)
  32. 如果字串表示式為 fixed,則為語句的行為null。 (第 24.7 條)
  33. 當堆疊分配大小為零時(§12.8.22)會回傳該值。

B.4 未指定的行為

  1. 產生的入口點方法名稱,以包含頂層語句(§7.1.3)。
  2. 物件的終結器(如有)執行的時間點,前提是該物件具備最終化資格(§7.8)。
  3. (true) 的表示法。
  4. 將超出範圍值或值轉換成內容中整數型別時的結果值floatdouble(unchecked)。
  5. 從 anonymous_method_expression 產生之委派的確切目標對象和目標方法包含 (~10.7.2)。
  6. 陣列的配置,但不安全的內容除外(\12.8.17.4)。
  7. 是否有其他方法能執行匿名函式的區塊,除了透過anonymous_methodlambda_expression的求值與調用(§12.22.3)之外。
  8. 靜態字段初始化的確切時間(~15.5.6.2)。
  9. 當列舉器物件執行時呼叫 MoveNext 的結果(§15.15.5.2)。
  10. 存取列舉器物件Current的結果在列舉器物件處於之前、執行中或之後的狀態時(§15.15.5.3)。
  11. 當列舉器物件處於執行中狀態時調用 Dispose 的結果(§15.15.5.4)。
  12. 在多個部分中宣告的類型的屬性是透過以未指定的順序組合其每個部分的屬性來確定的 (§23.3)。
  13. 成員封裝到結構中的順序 (§24.6.9)。
  14. 在終結器執行期間發生例外狀況,而且不會攔截該例外狀況 (§22.4)。
  15. 如果多個成員相符,則哪個成員是 (I.M) 的實作。

B.5 其他問題

  1. 浮點表達式評估的確切結果可能會因某個實作而異,因為允許實作使用比所需的範圍和/或有效位數更高的表達式來評估這類表達式(~8.3.7)。
  2. 某些簽章會保留給與其他程式設計語言的相容性({15.3.10)。

信息文字結尾。