exponenta event banner

MISRA C:2012 Правило 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).

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

Группа: Директивы предварительной обработки
Категория: Обязательно
Категория СМЖЛ: требуется