互換性

ユニバーサル C ランタイム ライブラリ (UCRT) は、C++ に適合するために必要な C 標準ライブラリの大部分をサポートしています。 特定の例外を除き、C99 (ISO/IEC 9899:1999) ライブラリが実装されています。

  • <complex.h> での厳密な型の互換性。
  • aligned_alloc。Windows オペレーティング システムでは割り当ての調整がサポートされないため、これが実装される可能性は低いです。 代わりに、非標準 の _aligned_malloc を使用してください。
  • strerrorlen_s
  • <stdatomic.h> での atomic のサポート
  • <threads.h> でのスレッドのサポート

UCRT は、POSIX.1 (ISO/IEC 9945-1:1996、POSIX システム アプリケーション プログラム インターフェイス) の C ライブラリの大きなサブセットも実装しています。 ただし、すべての POSIX 標準に完全に適合しているわけではありません。 また、UCRT はいくつかの Microsoft 固有の関数とマクロも実装していますが、これらは標準には含まれていません。

Visual C++ の Microsoft による実装に固有の関数は vcruntime ライブラリ内にあります。 これらの関数の多くは内部で使用されるものであり、ユーザー コードから呼び出すことはできません。 一部の関数は、デバッグでの使用や、実装の互換性の目的でドキュメントに記載されています。

C++ 標準では、グローバル名前空間のアンダースコアで始まる名前は、実装用に予約されています。 POSIX 関数と Microsoft 固有のランタイム ライブラリ関数は、どちらもグローバル名前空間に含まれていますが、標準の C ランタイム ライブラリの一部ではありません。 これらの関数の推奨される Microsoft の実装には、先頭にアンダースコアが付いているのはそのためです。 移植性の目的で、UCRT では既定の名前もサポートされていますが、それらを使用するコードがコンパイルされると、非推奨の警告が Microsoft C++ コンパイラから出されます。 非推奨とされるのは既定の名前だけであり、関数自体ではありません。 この警告を表示しないようにするには、元の POSIX 名を使用するコードでヘッダーをインクルードする前に _CRT_NONSTDC_NO_WARNINGS を定義します。 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) アプリでは、特定の関数がサポートされません。 これらの関数の一覧は、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」に記載されています。

Title 説明
UWP アプリ、Windows ランタイム、C ランタイム UCRT ルーチンがユニバーサル Windows アプリまたは Microsoft ストア アプリと互換性がないケースについて説明します。
ANSI C 準拠 UCRT における標準に準拠した名前について説明します。
UNIX プログラムを UNIX に移植するためのガイドラインを提供します。
Windows プラットフォーム (CRT) CRT がサポートするオペレーティング システムを一覧表示します。
旧バージョンとの互換性 CRT の古い名前が新しい名前にマップされる方法について説明します。
C ランタイム (CRT) と C++ 標準ライブラリ (STL) .lib ファイル CRT ライブラリ (.lib) ファイルと、関連するコンパイラ オプションの概要を示します。