Universal CRT へのコードのアップグレードUpgrade your code to the Universal CRT

Visual Studio 2015 では、Microsoft C ランタイム ライブラリ (CRT) がリファクタリングされました。In Visual Studio 2015, the Microsoft C Runtime Library (CRT) was refactored. 標準 C ライブラリ、POSIX の拡張機能、および Microsoft 固有の関数、マクロ、グローバル変数は、ユニバーサル C ランタイム ライブラリ (ユニバーサル CRT または UCRT) という新しいライブラリに移動されました。The Standard C Library, POSIX extensions and Microsoft-specific functions, macros, and global variables were moved into a new library, the Universal C Runtime Library (Universal CRT or UCRT). CRT のコンパイラ固有のコンポーネントは、新しい vcruntime ライブラリに移動されました。The compiler-specific components of the CRT were moved into a new vcruntime library.

UCRT は Windows コンポーネントであり、Windows 10 の一部として出荷されます。The UCRT is now a Windows component, and ships as part of Windows 10. UCRT は、C の呼び出し規約に基づく安定した ABI をサポートし、わずかな例外がありますが、ISO C99 標準に厳密に準拠しています。The UCRT supports a stable ABI based on C calling conventions, and it conforms closely to the ISO C99 standard, with only a few exceptions. コンパイラの特定のバージョンに関連付けられることはなくなりました。It is no longer tied to a specific version of the compiler. UCRT は、Visual Studio 2015 または Visual Studio 2017 でサポートされている Windows の任意のバージョンで使用できます。You can use the UCRT on any version of Windows supported by Visual Studio 2015 or Visual Studio 2017. 利点は、Visual Studio のアップグレードのたびに、CRT の新しいバージョンを対象に、ビルドを更新する必要がなくなったことです。The benefit is that you no longer need to update your builds to target a new version of the CRT with every upgrade of Visual Studio.

このリファクタリングでは、多くの CRT ヘッダー ファイル、ライブラリ ファイル、および再頒布可能パッケージの名前や場所、およびコードのために必要な展開方法が変更されました。With this refactoring, the names or locations of many CRT header files, library files, and redistributables, and the deployment methods required for your code have changed. さらに、UCRT 内の多数の関数とマクロが追加されるか、標準への準拠を向上させるために変更されました。In addition, many functions and macros in the UCRT were added or changed to improve standards conformance. これらの変更を利用するには、既存のコードとプロジェクトのビルド システムを更新する必要があります。To take advantage of these changes, your existing code and project build systems must be updated.

ユニバーサル CRT ファイルの場所Where to find the Universal CRT files

Windows コンポーネントと同じように、UCRT ライブラリのファイルとヘッダーは現在、Windows ソフトウェア開発キット (SDK) の一部です。As a Windows component, the UCRT library files and headers are now part of the Windows software development kit (SDK). Visual Studio をインストールするときに、UCRT を使用するために必要な Windows SDK の一部もインストールされます。When you install Visual Studio, the parts of the Windows SDK required to use the UCRT are also installed. Visual Studio インストーラーでは、Visual Studio のプロジェクト ビルド システムで使用される既定のパスに、UCRT ヘッダー、ライブラリ、および DLL ファイルの場所が追加されます。The Visual Studio installer adds the locations of the UCRT headers, libraries and DLL files to the default paths used by the Visual Studio project build system. Visual C++ プロジェクトを更新するときに、既定のプロジェクトの設定が使用されている場合、IDE がヘッダー ファイルの新しい場所を自動的に検出し、リンカーが新しい既定の UCRT ライブラリと vcruntime ライブラリを自動的に使用します。When you update your Visual C++ projects, if they use the default project settings, the IDE automatically finds the new locations for header files, and the linker automatically uses the new default UCRT and vcruntime libraries. 同様に、Developer コマンド プロンプトを使用してコマンド ライン ビルドを実行する場合、ヘッダーとライブラリのパスを含む環境変数が更新され、こちらも自動的に動作します。Similarly, if you use a Developer command prompt to do command-line builds, the environment variables that contain paths for headers and libraries are updated and work automatically as well.

標準 C ライブラリ ヘッダー ファイルが、Windows SDK に含まれるようになり、SDK バージョン固有のディレクトリのインクルード フォルダーに置かれます。The Standard C Library header files are now found in the Windows SDK in an include folder in an SDK version-specific directory. ヘッダー ファイルの標準的な場所は、Program Files または Program Files (x86) ディレクトリにある Windows Kits\10\Include\sdk-version\ucrt です。ここで sdk-version は、Windows のバージョンまたは更新プログラムに対応します。たとえば、Windows 10 Anniversary Update の場合は 10.0.14393.0 です。A typical location for the header files is in the Program Files or Program Files (x86) directory under Windows Kits\10\Include\sdk-version\ucrt, where sdk-version corresponds to a Windows version or update, for example, 10.0.14393.0 for the Anniversary Update of Windows 10.

UCRT スタティック ライブラリとダイナミック リンク スタブ ライブラリは、 Windows Kits\10\Lib\sdk-version\ucrt\architecture の下にある Program Files または Program Files (x86) ディレクトリにあります。ここで、architecture は、ARM、x86、または X64 です。The UCRT static libraries and dynamic link stub libraries are found in the Program Files or Program Files (x86) directory under Windows Kits\10\Lib\sdk-version\ucrt\architecture, where architecture is ARM, x86, or X64. 製品版およびデバッグのスタティック ライブラリは、libucrt.lib と libucrtd.lib であり、UCRT DLL のライブラリは、ucrt.lib と ucrtd.lib です。The retail and debug static libraries are libucrt.lib and libucrtd.lib, and the libraries for the UCRT DLLs are ucrt.lib and ucrtd.lib.

製品版およびデバッグの UCRT DLL は、別々の場所にあります。The retail and debug UCRT DLLs are found in separate locations. 製品版 DLL は再頒布可能であり、Program Files または Program Files (x86) ディレクトリの Windows Kits\10\Redist\ucrt\DLLs\architecture. の下にあります。The retail DLLs are redistributable, and can be found in the Program Files or Program Files (x86) directory under Windows Kits\10\Redist\ucrt\DLLs\architecture. デバッグ DLL は再頒布可能ではありません。プログラム ファイルまたはプログラム ファイル (x86) ディレクトリの Windows Kits\10\bin\architecture\ucrt フォルダーの下にあります。Debug UCRT libraries are not redistributable, and can be found in the Program Files or Program Files (x86) directory under Windows Kits\10\bin\architecture\ucrt folder.

C および C++ コンパイラ固有のランタイム サポート ライブラリ vcruntime には、プログラムの起動、および例外処理や組み込みなどの機能をサポートするために必要なコードが含まれています。The C and C++ compiler-specific runtime support library, vcruntime, contains the code required to support program startup and features such as exception handling and intrinsics. ライブラリとそのヘッダー ファイルは、Program Files または Program files (x86) ディレクトリのバージョン固有の Microsoft Visual Studio フォルダーに引き続き置かれています。The library and its header files are still found in the version-specific Microsoft Visual Studio folder in your Program Files or Program files (x86) directory. Visual Studio 2017 では、ヘッダーは、Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\include にあり、リンク ライブラリは、Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\lib\architecture にあります。ここで、edition はインストールされている Visual Studio のエディションであり、lib-version はライブラリのバージョンで、architecture はプロセッサのアーキテクチャです。In Visual Studio 2017, the headers are found under Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\include and the link libraries are found under Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\lib\architecture, where edition is the edition of Visual Studio installed, lib-version is the version of the libraries, and architecture is the processor architecture. OneCore とストアのリンク ライブラリは、libraries フォルダーにもあります。Link libraries for OneCore and Store are also found in the libraries folder. スタティック ライブラリの製品版とデバッグ バージョンは、libvcruntime.lib と libvcruntimed.lib です。The retail and debug versions of the static library are libvcruntime.lib and libvcruntimed.lib. ダイナミック リンク ライブラリの製品版とデバッグのスタブ ライブラリは、それぞれ vcruntime.lib と vcruntimed.lib です。The dynamic link retail and debug stub libraries are vcruntime.lib and vcruntimed.lib, respectively.

Visual C++ プロジェクトを更新するときに、プロジェクトの [リンカー] プロパティの [すべての既定のライブラリの無視][はい] に設定するか、コマンドラインで /NODEFAULTLIB リンカー オプションを使用する場合、ライブラリのリストを更新して、新しいリファクタリング ライブラリを組み込む必要があります。When you update your Visual C++ projects, if you have set the project's Linker property Ignore All Default Libraries to Yes or if you use the /NODEFAULTLIB linker option on the command line, then you must update your list of libraries to include the new, refactored libraries. 古い CRT ライブラリ (libcmt.lib、libcmtd.lib、msvcrt.lib、msvcrtd.lib など) をリファクタリングした同等のライブラリで置き換えます。Replace the old CRT library, for example, libcmt.lib, libcmtd.lib, msvcrt.lib, or msvcrtd.lib, with the equivalent refactored libraries. 使用する特定のライブラリの詳細については、「CRT ライブラリの機能」を参照してください。For information on the specific libraries to use, see CRT Library Features.

ユニバーサル CRT の配置と再配布Deployment and redistribution of the Universal CRT

UCRT は現在、Microsoft Windows オペレーティング システムのコンポーネントなので、Windows 10 では、オペレーティング システムの一部として含まれており、Windows Vista から Windows 8.1 までの旧バージョンのオペレーティング システムでは、Windows Update を通して入手できます。Because the UCRT is now a Microsoft Windows operating system component, it is included as part of the operating system in Windows 10 and is available through Windows Update for older operating systems, Windows Vista through Windows 8.1. 再頒布可能パッケージのバージョンは Windows XP で使用できます。A redistributable version is available for Windows XP. オペレーティング システムのコンポーネントであるため、UCRT の更新プログラムとサービスは、Visual Studio および Microsoft C++ コンパイラのバージョンとは無関係に、Windows Update によって管理されます。As an operating system component, UCRT updates and servicing are managed by Windows Update independently of Visual Studio and Microsoft C++ compiler versions. UCRT は、Windows コンポーネントであり、セキュリティおよび更新の容易さ、小さいイメージ サイズなどの理由から、アプリ用の UCRT を集中配置することをお勧めします。Because the UCRT is a Windows component, for security and ease of updates, and a smaller image size, we strongly recommend central deployment of the UCRT for your app.

UCRT は、Visual Studio 2015 または Visual Studio 2017 でサポートされている Windows の任意のバージョンで使用できます。You can use the UCRT on any version of Windows supported by Visual Studio 2015 or Visual Studio 2017. Windows 10 以外のサポートされているバージョンの Windows では、vcredist パッケージを使用して再配布することができます。You can redistribute it using a vcredist package for supported versions of Windows other than Windows 10. vcredist パッケージは、UCRT コンポーネントを含み、既定で、それらのコンポーネントがインストールされていない Windows オペレーティング システムにそれらを自動的にインストールします。The vcredist packages include the UCRT components and automatically install them on Windows operating systems that do not have them installed by default. 詳細については、「Visual C++ ファイルの再配布」を参照してください。For more information, see Redistributing Visual C++ Files.

UCRT のアプリのローカルの展開がサポートされていますが、パフォーマンスとセキュリティの両方の理由から推奨されません。App-local deployment of the UCRT is supported, though not recommended for both performance and security reasons. アプリのローカル展開用の DLL は、Windows SDK の一部として redist サブディレクトリに置かれています。The DLLs for app-local deployment are included as part of the Windows SDK, under the redist subdirectory. 必要な DLL には、ucrtbase.dll および api-ms-win-subset.dll という名前の APISet forwarder DLL のセットなどがあります。The DLLs required include ucrtbase.dll and a set of APISet forwarder DLLs named api-ms-win-subset.dll. 必要な DLL のセットはオペレーティング システムごとに異なるので、アプリのローカルの展開を使用するときにはすべての DLL を含めることをお勧めします。The set of DLLs required on each operating system varies, so we recommended that you include all of the DLLs when you use app-local deployment. アプリのローカルの展開に関するその他の詳細および注意事項については、「Deployment in Visual C++」 (Visual c での展開) を参照してください。For additional details and caveats about app-local deployment, see Deployment in Visual C++.

ユニバーサル CRT 関数およびマクロの変更Changes to the Universal CRT functions and macros

UCRT では、ISO C99 への準拠を改善し、コードの品質およびセキュリティの問題を解決するために、多くの関数が追加または更新されました。Many functions were added or updated in the UCRT to improve ISO C99 conformance, and to address code quality and security issues. このために、ライブラリの大幅な変更が必要な場合もありました。In some cases, this required breaking changes to the library. 古いバージョンの CRT を使用したときにコードが正常にコンパイルされても、UCRT を使用すると壊れる場合は、これらの更新や機能を活用するために、コードを変更する必要があります。If your code compiled cleanly when using an older version of the CRT but breaks when compiled using the UCRT, you must change your code to take advantage of these updates and features. ユニバーサル CRT での CRT の重大な変更と更新の詳細については、Visual C++ の変更履歴の「C Runtime Library (CRT)」 (C ランタイム ライブラリ (CRT)) セクションを参照してください。For a detailed listing of the breaking changes and updates to the CRT found in the Universal CRT, see the C Runtime Library (CRT) section of the Visual C++ change history. コードに必要な変更を識別するために使用できる影響を受けるヘッダーと関数の一覧が含まれています。It includes a list of affected headers and functions that you can use to identify the changes needed in your code.

参照See Also

Visual C++ 移植とアップグレードのガイドVisual C++ Porting and Upgrading Guide
アップグレードに関する潜在的な問題 (Visual C++) の概要Overview of potential upgrade issues (Visual C++)
旧バージョンの Visual C++ からのプロジェクトのアップグレードUpgrading Projects from Earlier Versions of Visual C++
Visual C++ 2003 ~ 2015 の変更履歴Visual C++ change history 2003 - 2015
Visual Studio 2017 の C++ 準拠の強化C++ conformance improvements in Visual Studio 2017