“Педантичні” ключі GCC

Статичний аналіз

Цікавився питаннями статичного аналізу програмного коду програм на С/С++.

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

Здоровий глузд і здорова логіка підказує “Якщо такі є, то чого б не використовувати доступні засоби не виходячи за межі середовища програмування?!”

Ключі GCC для статичного аналізу

Погуглив і знайшов в GCC набір цікавих ключів:

-Wall -Wextra -pedantic -Weffc++ -Wold-style-cast
-Wconversion -Winit-self -Wunreachable-code
  • -Wall – включає всі попередження, серед яких є сумісність з новим стандартом, коректність меж масиву, та ін. Зазвичай, у більшості програмістів цей параметр увімкнутий по замовчуванню, оскільки дає можливість уникнути непомічених помилок.
  • -Wextra – на додачу до -Wall покриває помилки в стилі порожнє тіло if, порівняння змінних типів signed i unsigned.
  • -pedantic – включає перевірку на відповідність ISO C++ стандарту.
  • -Weffc++ – цікава опція, що містить перевірку рекомендацій від Скота Майерса (Scott Meyers – експерт з мови програмування С++, консультант з розробки програмного забезпечення й автор серії книг “Ефективне використання С++”.:
    • Define a copy constructor and an assignment operator for classes with dynamically allocated memory. Визначайте конструктор копії й оператор присвоєння для тих класів, які використовують динамічне виділення пам’яті.
    • Prefer initialization to assignment in constructors.
      Надавайте перевагу ініціюванню аніж присвоєнню в конструкторах.
    • Make destructors virtual in base classes.
      Робіть деструктори віртуальними в базовому класі.
    • Have operator= return a reference to *this.
      Оператор operator= повинен повертати вказівник на *this.
    • Don’t try to return a reference when you must return an object.
      Не намагайтеся повернути посилання, коли ви повинні повернути об’єкт.
    • Distinguish between prefix and postfix forms of increment and decrement operators.
      Розрізняйте префіксну та постфіксну форму операторів інкременту та декременту.
    • Never overload &&, ||, or ,.
      Ніколи не перевантажуйте оператори &&, ||, чи ,.
  • -Wold-style-cas – реагує на приведення типів у стилі Сі.
  • -Werr='тип попередження' – сприймати вказане попередження як помилку. Якщо передати компілятору
    -Werr без параметрів, це означатиме, що кожне попередження сприйматиметься як помилка.
  • -Wconversion -Wsign-conversion – реагує на перетворення типу, при якому може змінитися значення.
  • -Winit-self – уникнення “само-визначення”, тобто ситуацій типу int i = i;
  • -Wunreachable-code – реагує на код, який ніколи не буде виконаний.

Детальніше про них можна прочитати:

Ключі GCC для статичного аналізу в Qt

Проте, вказавши ці ключі в Qt-проекті, в .pro-файлі:

QMAKE_CXXFLAGS += -Wall -Wextra -pedantic -Wold-style-cast
QMAKE_CXXFLAGS += -Wconversion -Winit-self

Отримую на порожньому проекті порядку 0.5К попереджень! При чому, абсолютна їх більшість стосується не мого коду, а коду Qt.

Щоб цього уникнути варто скористатися GCC-шним ключем -isystem щою помітити каталог з хедерами Qt як системний (порада зі ).

Отже, для адекватного статичного аналізу коду проекту на Qt потрібно додати в .pro-файл наступний код (з вказаними бажаними ключами, наприклад, як у мене):

QMAKE_CXXFLAGS += -isystem "D:\\Qt\\4.8.4\\include"
QMAKE_CXXFLAGS += -Wall -Wextra -pedantic -Wold-style-cast
QMAKE_CXXFLAGS += -Wconversion -Winit-self

Посилання

Send feedback

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s