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: Требуется