Предупреждение MISRA 12.6 при проверке нескольких определений swich компилятора с помощью #if

#c #c-preprocessor #conditional-compilation #misra

#c #c-препроцессор #условная компиляция #misra

Вопрос:

Если существует код, применимый более чем к 1 проекту / варианту, мы используем переключатели препроцессора (переключатели компилятора) для включения или отключения кода. Например, если MACRO1, MACRO2 и MACRO3 являются директивами препроцессора или переключателями компилятора в проекте, чем

 #if (defined MACRO1 || defined MACRO2)
/* Do something */
#elif (defined MACRO2 amp;amp; defined MACRO3) 
/* Do something */
#else
/* Do something */
#endif
 

Этот условный оператор #if выдает предупреждение MISRA 12.6 как
«логическое выражение, требуемое для operator: ‘!’; опция -strong(B,…) может помочь обеспечить логическое исполнение»

Может кто-нибудь, пожалуйста, скажите мне, есть ли альтернативный способ написать этот условный оператор или как его обосновать?

Комментарии:

1. Я не вижу «operator!»; возможно, это в одном из макросов? Общая жалоба возникает, когда вы применяете логический оператор к int, например, in !0 .

2. Это предупреждение вызвано не переключениями компилятора, а чем-то другим в коде.

3. В коде, как показано, нет ничего несоответствующего MISRA…