#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…