Kompatibilitas

Universal C Runtime Library (UCRT) mendukung sebagian besar pustaka standar C yang diperlukan untuk kesamaan C++. Ini mengimplementasikan pustaka C99 (ISO/IEC 9899:1999), dengan pengecualian tertentu:

  • kompatibilitas jenis ketat di <complex.h>.
  • aligned_alloc, yang mungkin tidak akan diterapkan karena sistem operasi Windows tidak mendukung alokasi yang selaras. Gunakan non-standar _aligned_malloc, sebagai gantinya.
  • strerrorlen_s
  • dukungan atom di <stdatomic.h>
  • dukungan threading di <threads.h>

UCRT juga mengimplementasikan subset besar dari pustaka C POSIX.1 (ISO/IEC 9945-1:1996, Antarmuka Program Aplikasi Sistem POSIX). Namun, ini tidak sepenuhnya sesuai dengan standar POSIX tertentu. UCRT juga mengimplementasikan beberapa fungsi dan makro khusus Microsoft yang bukan bagian dari standar.

Fungsi khusus untuk implementasi Microsoft Visual C++ ditemukan di pustaka vcruntime. Banyak dari fungsi ini untuk penggunaan internal dan tidak dapat dipanggil oleh kode pengguna. Beberapa didokumenkan untuk digunakan dalam penelusuran kesalahan dan kompatibilitas implementasi.

Standar C++ mencadangkan nama yang dimulai dengan garis bawah di namespace layanan global ke implementasi. Fungsi POSIX dan fungsi pustaka runtime khusus Microsoft berada di namespace layanan global, tetapi bukan bagian dari pustaka runtime C standar. Inilah sebabnya mengapa implementasi Microsoft pilihan dari fungsi-fungsi ini memiliki garis bawah terkemuka. Untuk portabilitas, UCRT juga mendukung nama default, tetapi pengkompilasi Microsoft C++ mengeluarkan peringatan penghentian saat kode yang menggunakannya dikompilasi. Hanya nama default yang tidak digunakan lagi, bukan fungsi itu sendiri. Untuk menekan peringatan, tentukan _CRT_NONSTDC_NO_WARNINGS sebelum menyertakan header apa pun dalam kode yang menggunakan nama POSIX asli. Karena standar C tidak mengizinkan nama non-standar dalam file header, secara default /std:c11 dan /std:c17 tidak mengekspos nama default untuk fungsi, jenis, dan makro POSIX. Jika nama-nama ini diperlukan, tentukan _CRT_DECLARE_NONSTDC_NAMES untuk mengeksposnya.

Fungsi tertentu di pustaka C standar memiliki riwayat penggunaan yang tidak aman, karena parameter yang disalahgunakan dan buffer yang tidak dicentang. Fungsi-fungsi ini sering menjadi sumber masalah keamanan dalam kode. Microsoft membuat sekumpulan versi fungsi ini yang lebih aman yang memverifikasi penggunaan parameter. Mereka memanggil handler parameter yang tidak valid ketika masalah terdeteksi pada runtime. Secara default, kompilator Microsoft C++ mengeluarkan peringatan penghentian saat fungsi digunakan yang memiliki varian lebih aman yang tersedia. Saat mengkompilasi kode sebagai C++, Anda dapat menentukan _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES sebagai 1 untuk menghilangkan sebagian besar peringatan. Makro ini memungkinkan templat kelebihan beban untuk memanggil varian yang lebih aman sambil mempertahankan kode sumber portabel. Untuk menekan peringatan, tentukan _CRT_SECURE_NO_WARNINGS sebelum menyertakan header apa pun dalam kode yang menggunakan fungsi-fungsi ini. Untuk informasi selengkapnya, lihat Fitur keamanan di CRT.

Kecuali seperti yang disebutkan dalam dokumentasi untuk fungsi tertentu, UCRT kompatibel dengan Windows API. Fungsi tertentu tidak didukung di aplikasi Windows Store atau Platform Windows Universal (UWP). Fungsi-fungsi ini tercantum dalam fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.

Judul Deskripsi
Aplikasi UWP, Runtime Windows, dan runtime C Menjelaskan kapan rutinitas UCRT tidak kompatibel dengan aplikasi Universal Windows atau aplikasi Microsoft Store.
Kesuaian ANSI C Menjelaskan nama yang sesuai standar dalam UCRT.
UNIX Menyediakan panduan untuk porting program ke UNIX.
Platform Windows (CRT) Mencantumkan sistem operasi yang didukung CRT.
Kompatibilitas mundur Menjelaskan cara memetakan nama CRT lama ke yang baru.
File runtime C (CRT) dan C++ Standard Library (STL) .lib Menyediakan gambaran umum file pustaka CRT (.lib) dan opsi pengkompilasi terkait.