MISRA C:2012 Rule 20.11

Макро-параметр сразу после # оператора не должен сразу сопровождаться ## оператором

Описание

Управляйте определением

Макро-параметр сразу после # оператора не должен сразу сопровождаться ## оператором.

Объяснение

Порядок оценки сопоставлен с несколькими #, несколько ##, или соединение # и ## операторы препроцессора, не задано. Правило 20.10 препятствует использованию # и ##. Результат # оператор является строковым литералом. Крайне маловероятно, что вставка этого результата к любой другой лексеме предварительной обработки приводит к допустимой лексеме.

Обменивайтесь сообщениями в отчете

## оператор препроцессора не должен следовать за макро-параметром после # оператора препроцессора.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#define A( x )    #x             /* Compliant */
#define B( x, y ) x ## y         /* Compliant */
#define C( x, y ) #x ## y     /* Non-compliant */

В этом примере вы видите три использования # и ## операторы. Можно использовать одни только эти операторы предварительной обработки (линия 1 и линия 2), но использование # затем несовместимо (линия 3).

Проверяйте информацию

Группа: предварительная обработка директив
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99