/std (Tentukan Versi Standar Bahasa)

Aktifkan fitur bahasa C dan C++ yang didukung dari versi standar bahasa C atau C++ yang ditentukan.

Sintaks

/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
/std:clatest

Keterangan

Opsi /std ini tersedia di Visual Studio 2017 dan yang lebih baru. Mereka digunakan untuk mengontrol fitur standar bahasa pemrograman ISO C atau C++ khusus versi yang diaktifkan selama kompilasi kode Anda. Opsi ini memungkinkan Anda menonaktifkan dukungan untuk fitur bahasa dan pustaka baru tertentu: yang dapat merusak kode yang ada yang sesuai dengan versi standar bahasa tertentu.

Pengkompilasi Microsoft C++ di Visual Studio 2017 dan versi yang lebih baru tidak mendukung mode standar C++ yang lebih lama dari C++14 (/std:c++14). Dukungan seperti itu tidak direncanakan. Sebagai solusi yang tidak sempurna, Dimungkinkan untuk menggunakan toolset pengkompilasi Visual C++ yang lebih lama yang tidak menerapkan fitur dari standar selanjutnya. Untuk informasi selengkapnya tentang cara menginstal dan menggunakan toolset kompilator yang lebih lama di Visual Studio, lihat Menggunakan multi-penargetan asli di Visual Studio untuk membangun proyek lama.

Dukungan standar C++

Opsi /std yang berlaku selama kompilasi C++ dapat dideteksi dengan menggunakan _MSVC_LANG makro praprosesor. Untuk informasi selengkapnya, lihat Makro Praprosesor.

Penting

Karena beberapa kode yang ada tergantung pada nilai makro __cplusplus , 199711Lpengkompilasi MSVC tidak mengubah nilai makro ini kecuali Anda secara eksplisit ikut serta dengan mengatur /Zc:__cplusplus. Tentukan /Zc:__cplusplus dan /std opsi untuk mengatur __cplusplus ke nilai yang sesuai.

/std:c++14
Opsi ini /std:c++14 memungkinkan fitur khusus standar C++14 yang diterapkan oleh pengkompilasi MSVC. Opsi ini adalah default untuk kode yang dikompilasi sebagai C++. Ini tersedia mulai dari Visual Studio 2015 Update 3.

Opsi ini menonaktifkan pengkompilasi dan dukungan pustaka standar untuk fitur yang diubah atau baru dalam versi standar bahasa yang lebih baru. Namun, ini tidak menonaktifkan beberapa fitur C++17 yang sudah diterapkan dalam rilis kompilator MSVC sebelumnya. Untuk informasi selengkapnya, lihat Kesesuaian bahasa Microsoft C/C++. Tabel menunjukkan fitur C++17 mana yang diaktifkan saat Anda menentukan /std:c++14.

Fitur berikut tetap diaktifkan saat /std:c++14 opsi ditentukan untuk menghindari perubahan yang melanggar bagi pengguna yang telah mengambil dependensi pada fitur yang tersedia di atau sebelum Visual Studio 2015 Update 2:

/std:c++17
Opsi ini /std:c++17 memungkinkan fitur dan perilaku khusus standar C++17. Ini memungkinkan set lengkap fitur C++17 yang diimplementasikan oleh pengkompilasi MSVC. Opsi ini menonaktifkan pengkompilasi dan dukungan pustaka standar untuk fitur yang baru atau diubah setelah C++17. Ini secara khusus menonaktifkan perubahan pasca-C++17 dalam Standar C++ dan versi Draf Kerja. Ini tidak menonaktifkan pembaruan cacat retroaktif dari Standar C++. Opsi ini tersedia mulai di Visual Studio 2017 versi 15.3.

Bergantung pada versi pengkompilasi MSVC atau tingkat pembaruan, fitur C++17 mungkin tidak sepenuhnya diimplementasikan atau sepenuhnya sesuai saat Anda menentukan /std:c++17 opsi. Untuk gambaran umum kesuaian bahasa C++ di Visual C++ menurut versi rilis, lihat Kesuaian bahasa Microsoft C/C++.

/std:c++20
Opsi ini /std:c++20 memungkinkan fitur dan perilaku khusus standar C++20. Tersedia mulai visual Studio 2019 versi 16.11, ini memungkinkan serangkaian lengkap fitur C++20 yang diimplementasikan oleh kompilator MSVC, kecuali untuk std::format, ekstensi pemformatan C++20 <chrono> , dan pabrik rentang dan adaptor rentang dari <ranges>. Fitur-fitur ini masih hanya tersedia di bawah /std:c++latest.

Opsi /std:c++20 menonaktifkan pengkompilasi dan dukungan pustaka standar untuk fitur yang baru atau diubah setelah C++20. Ini secara khusus menonaktifkan perubahan pasca-C++20 dalam Standar C++ dan versi Draf Kerja. Ini tidak menonaktifkan pembaruan cacat retroaktif dari Standar C++.

/std:c++latest
Opsi ini /std:c++latest memungkinkan semua fitur kompilator dan pustaka standar yang saat ini diimplementasikan yang diusulkan untuk standar draf berikutnya, serta beberapa fitur yang sedang berlangsung dan eksperimental. Opsi ini tersedia mulai dari Visual Studio 2015 Update 3.

Bergantung pada versi pengkompilasi MSVC atau tingkat pembaruan, C++17, C++20, atau fitur C++23 yang diusulkan mungkin tidak sepenuhnya diimplementasikan atau sepenuhnya sesuai saat Anda menentukan /std:c++latest opsi. Kami sarankan Anda menggunakan versi terbaru Visual Studio untuk kesuaian standar maksimum. Untuk gambaran umum kesuaian bahasa dan pustaka C++ di Visual C++ menurut versi rilis, lihat Kesuaian bahasa Microsoft C/C++.

Dalam versi Visual Studio 2019 sebelum versi 16.11, /std:c++latest diperlukan untuk mengaktifkan semua fitur kompilator dan pustaka standar C++20.

Untuk daftar fitur bahasa dan pustaka yang didukung, lihat Apa yang Baru untuk C++ di Visual Studio.

Opsi /std:c++latest ini tidak mengaktifkan fitur yang dijaga oleh sakelar /experimental , tetapi mungkin diperlukan untuk mengaktifkannya.

Catatan

Fitur pengkompilasi dan pustaka yang diaktifkan dapat /std:c++latest muncul di standar C++ di masa mendatang. Fitur yang belum disetujui tunduk pada perubahan atau penghapusan yang melanggar tanpa pemberitahuan dan disediakan berdasarkan apa adanya.

Dukungan standar C

Anda dapat memanggil pengkompilasi Microsoft C dengan menggunakan /TC opsi atau /Tc pengkompilasi. Ini digunakan secara default untuk kode yang memiliki .c ekstensi file, kecuali ditimpa oleh /TP opsi atau /Tp . Pengkompilasi C default (yaitu, pengkompilasi saat /std:c11 atau /std:c17 tidak ditentukan) mengimplementasikan ANSI C89, tetapi mencakup beberapa ekstensi Microsoft, beberapa di antaranya merupakan bagian dari ISO C99. Beberapa ekstensi Microsoft ke C89 dapat dinonaktifkan dengan menggunakan /Za opsi pengkompilasi, tetapi yang lain tetap berlaku. Tidak dimungkinkan untuk menentukan kesesuaian C89 yang ketat. Kompilator tidak mengimplementasikan beberapa fitur C99 yang diperlukan, jadi tidak mungkin untuk menentukan kesesuaian C99.

/std:c11
Opsi ini /std:c11 memungkinkan kesuaian ISO C11. Ini tersedia mulai di Visual Studio 2019 versi 16.8.

/std:c17
Opsi ini /std:c17 memungkinkan kesuaian ISO C17. Ini tersedia mulai di Visual Studio 2019 versi 16.8.

Karena prapemrosedur baru diperlukan untuk mendukung standar ini, /std:c11 opsi dan /std:c17 pengkompilasi mengatur /Zc:preprocessor opsi secara otomatis. Jika Anda ingin menggunakan preprocessor tradisional (warisan) untuk C11 atau C17, Anda harus mengatur /Zc:preprocessor- opsi kompilator secara eksplisit. /Zc:preprocessor- Mengatur opsi dapat menyebabkan perilaku yang tidak terduga, dan tidak disarankan.

Catatan

Pada saat rilis dan melalui Visual Studio 2019 versi 16.10, pustaka Windows SDK dan UCRT yang diinstal oleh Visual Studio belum mendukung kode C11 dan C17. Versi windows SDK dan UCRT yang diperbarui diperlukan. Untuk informasi selengkapnya dan petunjuk penginstalan, lihat Menginstal dukungan C11 dan C17 di Visual Studio.

Saat Anda menentukan /std:c11 atau /std:c17, MSVC mendukung semua fitur C11 dan C17 yang diperlukan oleh standar. Opsi /std:c11 pengkompilasi dan /std:c17 mengaktifkan dukungan untuk fungsionalitas ini:

IDE menggunakan pengaturan C untuk IntelliSense dan penyorotan kode saat file sumber Anda memiliki .c ekstensi file, atau saat Anda menentukan /TC opsi atau /Tc pengkompilasi. Saat ini, IntelliSense di C menyoroti kata kunci _Alignas, , _Alignof, _Noreturndan _Static_assert, tetapi bukan makro yang setara yang ditentukan dalam header standar: alignas, alignof, noreturn, dan static_assert.

Karena C17 sebagian besar adalah rilis perbaikan bug ISO C11, dukungan MSVC untuk C11 sudah mencakup semua laporan cacat yang relevan. Tidak ada perbedaan antara versi C11 dan C17 kecuali untuk __STDC_VERSION__ makro. Ini meluas ke 201112L untuk C11, dan 201710L untuk C17.

Pengkompilasi tidak mendukung sebagian besar fitur opsional ISO C11. Beberapa fitur opsional C11 ini memerlukan fitur C99 yang belum diterapkan MSVC karena alasan arsitektur. Anda dapat menggunakan makro uji fitur seperti __STDC_NO_VLA__ untuk mendeteksi tingkat dukungan pengkompilasi untuk fitur individual. Untuk informasi selengkapnya tentang makro khusus C yang telah ditentukan sebelumnya, lihat Makro yang telah ditentukan sebelumnya.

  • Tidak ada dukungan angka multithreading, atomik, atau kompleks yang sesuai.

  • aligned_alloc dukungan hilang, karena implementasi timbunan Windows. Alternatifnya adalah menggunakan _aligned_malloc.

  • Cacat laporan dukungan 400 saat ini tidak di-unimplementasi realloc karena perubahan ini akan merusak ABI.

  • Dukungan array panjang variabel (VLA) tidak direncanakan. VLA menyediakan vektor serangan sebanding dengan gets, yang tidak digunakan lagi dan direncanakan untuk dihapus.

/std:clatest
Opsi /std:clatest ini berulah seperti sakelar /std:c++latest untuk pengkompilasi C++. Sakelar memungkinkan semua fitur kompiler dan pustaka standar yang saat ini diimplementasikan yang diusulkan untuk standar draf C berikutnya, serta beberapa fitur yang sedang berlangsung dan eksperimental.

Untuk informasi selengkapnya, lihat bagian fitur pustaka Standar C dari kesuaian bahasa Microsoft C/C++.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk informasi selengkapnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Language.

  3. Di C++ Language Standard (atau untuk C, C Language Standard), pilih standar bahasa yang akan didukung dari kontrol dropdown, lalu pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Lihat juga

/Zc:__cplusplus[-]
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC