Чи використовувати прапорець -pedantic в g ++ чи ні?


16

Я вивчаю C ++ і використовую g ++ в Linux для практики.

  1. Мені хочеться знати, чи люди, які працюють в якості програмістів, використовують прапорець, орієнтований на g ++, а також його значення в реальному світі.

  2. Що з іншими компіляторами, вони також дозволяють це? Це стало деяким фактичним стандартом?

Мені це цікаво, оскільки я читаю буква C ++ Primer, де автор зазначає, що невірно використовувати вираження як параметр у визначенні масиву, а g ++ за замовчуванням дозволяє. І можуть бути інші речі, про які я не знаю.



Відповіді:


21

Так, абсолютно це робіть. Насправді, вам необхідно вивчити довідкову статтю і включити більше попереджень , ніж -pedanticта -Wallробитиме.

Ні, немає стандарту. MSVC використовує, /W4наприклад.


7
+1, я зазвичай роблю -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade

4
@JaredBurrows: Насправді я перестав використовувати -pedanticC ++, оскільки керівництво GCC означає, що воно призначене лише для C, і я перейшов до використання -std=c++14в нових проектах.
greyfade

1
@greyfade Ах, я мав би сказати, -Wall -Wextra -Werror -std=c++14:)
Джаред Берроуз

1
Я щойно виявив -педантичні помилки, що дає помилки, а не попередження.
Галик

6
@VillasV Добре -Werrorперетворює всі попередження в помилки. Але -pedantic-errorsлише робить помилки з Standard ICO C++порушень.
Галик

10

Хоча я досить довго не програмував C ++, я б радив вам використовувати цей прапор. Це допоможе вам створити код, що відповідає стандартам, і полегшить життя кожного. AFAIK, більшість інших компіляторів не підтримують розширення gcc / g ++.

Я ненавиджу це, наприклад, коли я не можу компілювати код лише тому, що оригінальний розробник вирішив кодувати проти нестандартних розширень компілятора.

Б'юсь об заклад, що величезна кількість (скажімо, 20%) програм Linux, написаних на C / C ++, не компілюватиметься ні з чим, крім gcc / g ++, що мене трохи сумує. Завжди дотримуйтесь стандартів.


2
Востаннє, коли я намагався використовувати інші компілятори, я б сказав, що це було схоже на 20%, що буде працювати з іншими компіляторами, а 80% залежало від розширень gcc.
Джеррі Труну

6

Особисто я використовую:

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

Таким чином, увімкнено безліч попереджень, але важливіше трактує всі попередження як помилки (оскільки більшість попереджень є логічними помилками у вашому мисленні).


Ви додали б щось до цього списку у 2019 році?
Айксан

1
@Ayxan Це мінімальний набір, який я рекомендую використовувати всім. Але є ще купа корисних. Але вам потрібно перебрати документацію і подивитися, чи корисні вони для вас. Подивіться-Wunreachable-code -Wno-long-long
Мартін Йорк

1
@Ayxan Під час створення коду профілю:-g -pg -fprofile-arcs -ftest-coverage
Мартін Йорк,

1
@Ayxan При створенні налагодження-g -O0
Мартін Йорк

1
@Ayxan При створенні виробничого коду-O3
Мартін Йорк

1

Цілком важливо використовувати -pedanticпрапор.

Я лише додам, що для діючого стандарту доцільно використовувати щось подібне до:

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

Де:

  • -std=c++17говорить про те, що він повинен дотримуватися перегляду стандарту C ++, опублікованого в 2017 році, докладніше про нього можна прочитати тут .

  • -Wall повідомляє це:

    Увімкніть усі попередження про конструкції, які деякі користувачі вважають сумнівними, і які легко уникнути (або змінити для запобігання попередження), навіть у поєднанні з макросами, іншими словами, деяким набором попереджень.

  • -Wextra повідомляє це, щоб увімкнути ще кілька попереджень, але не всіх.

  • -Werror вказує на те, щоб усі попередження переходили до помилок.

  • -Wpedanticабо просто -pedanticповідомляє це:

    Видавати всі попередження, вимагані суворими стандартами ISO C та ISO C ++; відхилити всі програми, які використовують заборонені розширення, та деякі інші програми, які не відповідають стандартам ISO C та ISO C ++.

  • -pedantic-errors говорить про те, що дає помилку, коли базовий стандарт (див. -Wpedantic) вимагає діагностики.


Цей набір, як правило, корисний не тільки для початківців, оскільки вони поступово вивчать кожне попередження, що може призвести до помилок, але і для нормального використання.

Усі параметри попередження детально описані тут, на сторінці GNU / GCC .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.