Перейшли на роботі використання компілятора, який підтримує стандарт C++17.
Активно починаємо користуватися різними плюшками з цього стандарту.
Порадував атрибут [[fallthrough]] для switch case конструкцій.
Суть даного атрибуту в тому, що він вказує, що оператор break був пропущений навмисно в конструкції switch case і що це не є помилкою програміста.
Справа в тому, що конструкція switch case дозволяє наскрізне виконання програмного коду через всі варіанти вибору case , якщо не було додано оператор break .
Ось класичний варіант застосування даної конструкції
int x = 100; bool check_x() { switch (x) { case 0: return true; case 50: x = 0: break; case 100: return false; default: return false; } }
А ось варіант із наскрізним виконанням коду, коли пропущено оператора break.
int x = 100; bool check_x() { switch (x) { case 0: case 50: case 100: return true; default: return false; } }
В даному випадку для всіх значень 0, 50, 100 буде виконуватися той самий код. Але при цьому компілятор може видати попередження, інші програмісти, які можуть підтримувати ваш програмний код надалі, можуть вважати це помилкою.
Щоб вказати, що пропуск оператора break був зроблений намір, було введено атрибут fallthrough ,. І тоді цей програмний код виглядатиме так
int x = 100; bool check_x() { switch (x) { case 0: [[fallthrough]]; case 50: [[fallthrough]]; case 100: return true; default: return false; } }
Також можна інформувати компілятор, що оператор default був пропущений навмисно.
int x = 100; bool check_x() { switch (x) { case 0: [[fallthrough]]; case 50: [[fallthrough]]; case 100: return true; case 105: [[fallthrough]]; } return false; }
В цілому, річ дуже корисна, яка прибирає різночитання та людський фактор.