Apakah akan menggunakan flag -pedantic di g ++ atau tidak?

16

Saya belajar C ++ dan saya menggunakan g ++ di Linux untuk berlatih.

  1. Saya ingin tahu apakah orang yang bekerja sebagai programmer menggunakan flag g ++ -pedantic dan juga pentingnya di dunia nyata.

  2. Bagaimana dengan kompiler lain, apakah mereka juga mengizinkan ini? Apakah ini menjadi standar de-facto?

Saya tertarik karena saya membaca C ++ Primer di mana penulis menunjukkan bahwa ilegal untuk menggunakan ekspresi non-const sebagai dimensi dalam definisi array dan g ++ secara default memungkinkannya. Dan mungkin ada hal-hal lain yang tidak saya sadari.

pengguna803563
sumber

Jawaban:

21

Ya, benar-benar melakukan ini. Bahkan, Anda perlu mempelajari halaman manual dan mengaktifkan lebih peringatan dari -pedanticdan -Wallakan melakukan.

Tidak, tidak ada standar. Penggunaan MSVC /W4misalnya.

Edward Strange
sumber
7
+1, biasanya saya lakukan -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade
4
@JaredBurrows: Sebenarnya saya sudah berhenti menggunakan -pedanticdengan C ++ karena manual GCC menyiratkan itu hanya dimaksudkan untuk C, dan saya sudah pindah ke menggunakan -std=c++14dalam proyek-proyek baru.
greyfade
1
@ Greyfade Ah, saya seharusnya mengatakan, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows
1
Saya baru saja menemukan kesalahan -pedantic-yang memberikan kesalahan bukan peringatan.
Galik
6
@VillasV Yah -Werrormengubah semua peringatan menjadi kesalahan. Tetapi -pedantic-errorshanya membuat kesalahan karena Standard ICO C++pelanggaran.
Galik
10

Meskipun saya belum memprogram C ++ selama beberapa waktu, saya menyarankan Anda untuk menggunakan flag ini. Ini membantu Anda membuat kode yang sesuai standar dan akan membuat hidup semua orang lebih mudah. AFAIK, kebanyakan kompiler lain tidak mendukung ekstensi gcc / g ++.

Saya benci misalnya, ketika saya tidak dapat mengkompilasi kode hanya karena pengembang asli memutuskan untuk kode terhadap ekstensi kompiler non-standar.

Saya bertaruh bahwa sejumlah besar (katakanlah 20%) dari program linux yang ditulis dalam C / C ++ tidak akan dikompilasi dengan apa pun kecuali gcc / g ++, yang membuat saya agak sedih. Selalu patuhi standar.

Elang
sumber
2
Terakhir kali saya mencoba menggunakan kompiler lain, saya akan mengatakan itu lebih seperti 20% yang akan bekerja dengan kompiler lain, dan 80% tergantung pada ekstensi gcc.
Jerry Coffin
6

Secara pribadi saya menggunakan:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

Dengan demikian menyalakan sejumlah peringatan, tetapi yang lebih penting memperlakukan semua peringatan sebagai kesalahan (karena kebanyakan peringatan adalah kesalahan logis dalam pemikiran Anda).

Martin York
sumber
Apakah Anda menambahkan sesuatu ke daftar ini pada 2019?
Ayxan
1
@Ayxan Itu set minimum yang saya sarankan digunakan semua orang. Tetapi ada banyak lagi yang berguna. Tetapi Anda perlu membaca dokumentasi dan melihat apakah mereka berguna untuk Anda. Lihatlah-Wunreachable-code -Wno-long-long
Martin York
1
@Ayxan Saat membuat kode profil:-g -pg -fprofile-arcs -ftest-coverage
Martin York
1
@Ayxan Saat membangun debug-g -O0
Martin York
1
@Ayxan When membangun kode produksi-O3
Martin York
1

Sangat penting untuk menggunakan -pedanticbendera.

Saya hanya akan menambahkan, bahwa dengan standar saat ini disarankan untuk menggunakan sesuatu yang mirip dengan:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

Dimana:

  • -std=c++17memintanya untuk mematuhi revisi standar C ++, diterbitkan pada tahun 2017, Anda dapat membaca lebih lanjut tentang hal ini di sini .

  • -Wall memberitahukannya kepada:

    Aktifkan semua peringatan tentang konstruksi yang oleh beberapa pengguna dianggap dipertanyakan, dan yang mudah dihindari (atau dimodifikasi untuk mencegah peringatan), bahkan dalam hubungannya dengan makro, dengan kata lain beberapa set peringatan.

  • -Wextra memintanya untuk mengaktifkan beberapa peringatan lagi, masih belum semuanya.

  • -Werror memintanya untuk membuat semua peringatan menjadi kesalahan.

  • -Wpedanticatau hanya -pedanticmemberitahukannya kepada:

    Keluarkan semua peringatan yang diminta oleh ISO C dan ISO C ++ yang ketat; tolak semua program yang menggunakan ekstensi terlarang, dan beberapa program lain yang tidak mengikuti ISO C dan ISO C ++.

  • -pedantic-errors memintanya untuk memberikan kesalahan setiap kali standar dasar (lihat -Wpedantic) memerlukan diagnostik.


Set ini biasanya berguna tidak hanya untuk pemula, karena mereka akan secara bertahap belajar setiap peringatan memiliki potensi untuk menghasilkan kesalahan, tetapi juga untuk penggunaan normal.

Semua opsi peringatan dijelaskan secara rinci di sini di halaman GNU / GCC .

LinuxSecurityFreak
sumber