Определение макроса заканчивается точкой с запятой
Этот дефект возникает, когда макрос, который вызывается по крайней мере один раз, имеет определение, заканчивающееся точкой с запятой.
Если определение макроса заканчивается точкой с запятой, расширение макроса может привести к непреднамеренной программной логике в определенных контекстах, таких как выражение.
Например, рассмотрим макрос:
#define INC_BY_ONE(x) ++x;
res = INC_BY_ONE(x)%2;
res = ++x; %2;
x+1 назначается res, что, вероятно, непреднамеренно. Левый автономный оператор %2; является действительным кодом С и может быть обнаружен только путем включения строгих предупреждений компилятора.Не завершайте определения макросов точкой с запятой. Оставьте его пользователям макроса, чтобы добавить точку с запятой после макроса, когда это необходимо.
Кроме того, используйте встроенные функции в выборе функциональных макросов, которые включают операторы, заканчивающиеся точкой с запятой.
| Группа: Хорошая практика |
| Язык: C | C++ |
| По умолчанию: Off |
Синтаксис командной строки
: SEMICOLON_TERMINATED_MACRO |
| Влияние: Низкое |
Find defects (-checkers) | Incorrectly indented statement | Macro with multiple statements | Semicolon on same line as if, for or while statement