Правило 20.11 MISRA C:2012

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

Описание

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

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

Объяснение

Порядок оценки, сопоставленной с несколькими #, несколько ## или соединение # и операторов препроцессора ##, не задан. Правило 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