/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
, 199711L
pengkompilasi 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:
- Aturan untuk
auto
dengan braced-init-lists typename
dalam templat-parameter- Menghapus trigraf
- Atribut untuk namespace dan enumerator
- literal karakter u8
/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 set lengkap fitur C++20 yang diimplementasikan oleh kompilator MSVC. Perhatikan bahwa Visual Studio 2022 versi 17.0 tidak mendukung std::format
, ekstensi pemformatan C++20 <chrono>
, dan rentang pabrik dan rentang adaptor dari <ranges>
bawah /std:c++20
karena perubahan yang terlambat dalam fitur tersebut segera setelah publikasi Standar.
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++.
Opsi ini /std:c++20
memungkinkan mode kesamaan standar yang disediakan oleh /permissive-
kecuali secara eksplisit ditimpa dengan /permissive
.
/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.
Sejak Visual Studio 2019 versi 16.8, /std:c++latest
opsi telah mengaktifkan mode kesuaian standar yang disediakan oleh /permissive-
kecuali secara eksplisit ditimpa dengan /permissive
.
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:
_Noreturn
dan <stdnoreturn.h>_Alignas
,_Alignof
dan <stdalign.h>_Generic
dan <tgmath.h>
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
, _Noreturn
dan _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
Buka kotak dialog Halaman Properti proyek. Untuk informasi selengkapnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Language.
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