相容性
通用 C 執行時間程式庫 (UCRT) 支援 C++ 一致性所需的大部分 C 標準程式庫。 它會實作 C99 (ISO/IEC 9899:1999) 程式庫,但有某些例外:
- complex.h > 中的 < strict 類型相容性。
aligned_alloc
,這可能不會實作,因為 Windows 作業系統不支援對齊的配置。 請改用非標準_aligned_malloc
。strerrorlen_s
- stdatomic.h 中的 < atomic 支援>
- threading support in < threads.h>
UCRT 也會實作 POSIX.1 的大型子集(ISO/IEC 9945-1:1996,POSIX 系統應用程式介面)C 程式庫。 不過,它不符合任何特定的 POSIX 標準。 UCRT 也會實作數個不屬於標準的 Microsoft 特定函式和宏。
Microsoft Visual C++ 實作特有的函式可在 vcruntime 程式庫中找到。 其中許多函式是供內部使用,且無法由使用者程式碼呼叫。 有一部分會記載在說明中,供偵錯及實作相容性之用。
C++ 標準在全域命名空間中,會保留以底線開頭的名稱供實作之用。 POSIX 函式和 Microsoft 特定的執行時間程式庫函式都在全域命名空間中,但不是標準 C 執行時間程式庫的一部分。 這就是為什麼這些函式的慣用 Microsoft 實作具有前置底線的原因。 為了確保可攜性,UCRT 也能支援預設名稱,但當使用這些名稱的程式碼遭到編譯時,Microsoft C++ 編譯器仍會發出已淘汱的警告。 只有預設名稱已被取代,而不是函式本身。 若要停止顯示警告,請先定義 _CRT_NONSTDC_NO_WARNINGS
,然後再將標頭加入使用原始 POSIX 名稱的程式碼中。 因為 C 標準不允許標頭檔中的非標準名稱,因此預設 /std:c11
/std:c17
不會公開 POSIX 函式、類型和宏的預設名稱。 如果需要這些名稱,請定義 _CRT_DECLARE_NONSTDC_NAMES
以公開它們。
標準 C 程式庫中有某些函式曾因為誤用參數及未檢查緩衝區而有使用方式不安全的記錄。 這些函式通常是程式碼中安全性問題的來源。 Microsoft 建立了一組更安全的這些函式,以驗證參數使用方式。 在執行時間偵測到問題時,它們會叫用不正確參數處理常式。 根據預設,當現行函式有更安全的變體可供使用時,Microsoft C++ 編譯器便會發出已淘汱的警告。 當您將程式碼編譯為 C++ 時,可以定義為 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
1 來消除大部分的警告。 此宏可讓範本多載呼叫更安全的變體,同時維護可攜式原始程式碼。 若要停止顯示警告,請先定義 _CRT_SECURE_NO_WARNINGS
,然後再將標頭加入使用這些函式的程式碼中。 如需詳細資訊,請參閱 CRT 中的安全性功能。
除了文件中所述有關這些特殊函式的相關資訊之外,UCRT 也相容於 Windows API。 Windows 市集或 通用 Windows 平臺 ( UWP ) app 不支援某些函式。 這些函式列在 通用 Windows 平臺 應用程式中 不支援的 CRT 函式中。
相關文章
標題 | 描述 |
---|---|
UWP 應用程式、Windows 執行階段和 C 執行時間 | 描述 UCRT 常式與通用 Windows 應用程式或 Microsoft Store 應用程式不相容時。 |
ANSI C 一致性 | 描述 UCRT 中符合標準的名稱。 |
UNIX | 提供移植程式至 UNIX 的指導方針。 |
Windows 平臺 (CRT) | 列出 CRT 支援的作業系統。 |
回溯相容性 | 描述如何將舊的 CRT 名稱對應到新的 CRT 名稱。 |
C 執行時間 (CRT) 和 C++ 標準程式庫 (STL) .lib 檔案 |
提供 CRT 程式庫 (.lib) 檔案和相關聯之編譯器選項的概觀。 |