Это невозможно с препроцессором C. Вы можете определить «literal txt replace», как вы выразились, только в том случае, если текст, который вы хотите заменить, является одним идентификатором («объектоподобный макрос» на стандартном языке C). То, что вы написали, заставляет препроцессор думать, что вы пытаетесь определить «подобный функции макрос» с параметром с именем «(aligned(2))
», что является синтаксической ошибкой.
Я бы справился с этой проблемой, обернув всю конструкцию __attribute__
в объектоподобный макрос:
#if appropriate condition
#define ATTRIBUTE_ALIGNED_2 __attribute__((space(prog),aligned(2)))
#else
#define ATTRIBUTE_ALIGNED_2 __attribute__((aligned(2)))
#endif
, а затем заменить __attribute__((aligned(2)))
на ATTRIBUTE_ALIGNED_2
во всем исходном коде.