Apa perbedaan antara -std=c++11
dan -std=gnu++11
sebagai parameter kompilasi untuk gcc dan dentang? Pertanyaan yang sama dengan c99
dan gnu99
? Saya tahu tentang C ++ dan standar C, itu adalah perbedaan dalam parameter yang menarik minat saya.
Saya telah membaca di suatu tempat bahwa itu ada hubungannya dengan beberapa ekstensi tetapi tidak jelas bagi saya yang mana dan bagaimana memilih antara satu atau yang lain untuk proyek baru.
gnu
merujuk ke ekstensi, dan jika Anda ingin menulis kode portabel Anda harus tetap berpegang pada standar dan menghindari ekstensi sama sekali.Jawaban:
Seperti yang Anda ketahui sendiri, perbedaan antara dua opsi adalah apakah ekstensi GNU yang melanggar / memperpanjang standar C ++ diaktifkan atau tidak. Ekstensi GNU C ++ dijelaskan di sini . Anda juga dapat menggunakan sebagian besar ekstensi GNU C (dijelaskan di sini ) dalam program C ++ Anda. Akan bermanfaat juga untuk membaca tentang
-Wpedantic
opsi GCC di sini .Perhatikan bahwa beberapa ekstensi masih dapat berlaku saat menggunakan
-std=c++11
, selama mereka tidak bertentangan dengan standar. Sebagai contoh, ketika menggunakan kompiler MinGW, saya perlu ekstensi untuk berfungsiBoost.Lexical_Cast
. Tapi, selama Anda tidak menggunakannya, Anda lebih baik tetap berpegang pada standar tanpa ekstensi untuk portabilitas maksimum. Ini mungkin berguna jika Anda terpaksa mengganti kompiler.sumber
gnu11
tetapi tidak di dalamnyac++11
? Daftar yang Anda tautkan adalah semua ekstensi, dan seperti yang Anda tunjukkan, beberapa di antaranya juga diaktifkanc++11
(seperti__restrict__
).