Можно утверждать, что во многих случаях X-макросы увеличивают безопасность, потому что, например, легче убедиться, что сгенерированные массивы имеют одинаковую длину.
Однако, Misra C (из 2004справочные) правила, как представляется, содержат множество правил препроцессора, ограничивающих использование:
Правило 19.1 (рекомендательное) # операторам включения в файл должны предшествовать только другие директивы или комментарии препроцессора.
Неприятно, если исходная таблица находится в другом файле, который включен, например, для создания массива.Но это рекомендательное правило, поэтому его можно обойти.
Правило 19.4 (обязательно) Макросы C должны расширяться только до фигурного инициализатора, константы, строкового литерала, выражения в скобках, спецификатора типаспецификатор класса хранения или конструкция do-while-zero.
Не должно вызывать проблем, поскольку большинство X-макросов используются для генерации инициализаторов или констант массива.
Правило 19.6 (обязательно) #undef не должно использоваться.
Делает невозможным использование некоторых шаблонов X-макроса.К сожалению, это не мешает работе макросов X.
Правило 19.7 (рекомендация) Функцию следует использовать вместо макроса, подобного функции.
РекомендацияТолько правило.
Правило 19.12 (обязательно) Должно быть не более одного вхождения операторов препроцессора # или ## в одном макроопределении.
Может работатьвокруг использования вложенных макросов.
Правило 19.13 (рекомендация) Не следует использовать операторы препроцессора # и ##.
Неудобно при создании, например, перечислений, но опять же этоявляется только рекомендательным правилом.
Правило 19.15 (обязательно) Должны быть приняты меры предосторожности для предотвращения повторного включения содержимого заголовочного файла.
В некоторых случаях проблематично, но можно обойти.
Глядя на вышесказанное, кажется, что можно использовать X-макросы с кодом Misra C, если вы осторожны.
Это мойвывод правильный или сом естьПравило я пропускаю?