코드를 유니버설 CRT로 업그레이드Upgrade your code to the Universal CRT

Visual Studio 2015에서 Microsoft CRT(C 런타임 라이브러리)가 리팩터링되었습니다.In Visual Studio 2015, the Microsoft C Runtime Library (CRT) was refactored. 표준 C 라이브러리, POSIX 확장 및 Microsoft 전용 함수, 매크로, 전역 변수가 새로운 라이브러리인 유니버설 CRT 또는 UCRT(유니버설 C 런타임 라이브러리)로 이동되었습니다.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. Visual Studio 2015 또는 Visual Studio 2017에서 지원하는 Windows 버전에서 UCRT를 사용할 수 있습니다.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 설치 관리자는 UCRT 헤더, 라이브러리 및 DLL 파일의 위치를 Visual Studio 프로젝트 빌드 시스템에 사용되는 기본 경로에 추가합니다.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. 마찬가지로 개발자 명령 프롬프트를 사용하여 명령줄 빌드를 실행하면 헤더 및 라이브러리의 경로가 포함된 환경 변수가 업데이트되고 자동으로 작동합니다.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 라이브러리 헤더 파일은 이제 SDK 버전별 디렉터리에 있는 include 폴더의 Windows SDK에서 찾을 수 있습니다.The Standard C Library header files are now found in the Windows SDK in an include folder in an SDK version-specific directory. 일반적인 헤더 파일 위치는 Windows Kits\10\Include\sdk-version\ucrt 아래 Program Files 또는 Program Files (x86) 디렉터리입니다. 여기서 sdk-version_은 Windows 버전 또는 업데이트에 해당합니다(예: Windows 10 1주년 업데이트의 경우 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은 재배포할 수 있으며, Windows Kits\10\Redist\ucrt\DLLs\architecture. 아래 Program Files 또는 Program Files (x86) 디렉터리에 있습니다.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. 디버그 UCRT 라이브러리는 재배포할 수 없으며, Windows Kits\10\bin\architecture\ucrt 아래 Program Files 또는 Program Files (x86) 디렉터리에 있습니다.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 및 Store에 대한 링크 라이브러리는 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 업데이트를 통해 사용할 수 있습니다.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 및 Visual C++ 컴파일러 버전과는 별개로 Windows 업데이트를 통해 관리됩니다.As an operating system component, UCRT updates and servicing are managed by Windows Update independently of Visual Studio and Visual 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.

Visual Studio 2015 또는 Visual Studio 2017에서 지원하는 Windows 버전에서 UCRT를 사용할 수 있습니다.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 배포가 지원되지만 성능 및 보안상의 이유로 권장되지 않습니다.App-local deployment of the UCRT is supported, though not recommended for both performance and security reasons. app-local 배포용 DLL은 redist 하위 디렉터리 아래에 Windows SDK의 일부로 포함됩니다.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 전달자 DLL 집합이 포함됩니다.The DLLs required include ucrtbase.dll and a set of APISet forwarder DLLs named api-ms-win-subset.dll. 각 운영 체제에서 필요한 DLL 집합은 다르므로 app-local 배포를 사용할 경우 모든 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. app-local 배포에 대한 자세한 내용 및 주의할 점은 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

ISO C99 준수를 향상하고 코드 품질 및 보안 문제를 해결하기 위해 UCRT에서 많은 함수가 추가되거나 업데이트되었습니다.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++ 변경 기록의 CRT(C 런타임 라이브러리) 섹션을 참조하세요.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 - 2015Visual C++ change history 2003 - 2015
Visual Studio 2017의 C++ 규칙 향상C++ conformance improvements in Visual Studio 2017