Возможно ли создать препроцессорную функцию, которая будет определять несколько других макросов препроцессора?Можно ли использовать функцию препроцессора для определения нескольких макросов препроцессора?
Я работаю в микро рамках контроллера, который требует несколько макросов, которые будут сделаны для того, чтобы родовой обработчик прерывания для функции:
<MODULE_NAME>_IRQ_PIN //ex: PORTB_PIN(0)
<MODULE_NAME>_IRQ_IN_REGISTER //ex: GPIO_PBIN
<MODULE_NAME>_IRQ_NUMBER //ex: GPIO_IRQA
<MODULE_NAME>_IRQ_INTCFG_REG //ex: GPIO_INTCFGA
Я пытаюсь сделать этот процесс более универсальным и легче от точка реализации. Есть около десяти из этих макросов, которые необходимо определить, но их определения могут быть выведены, если дано 1) имя порта 2) номер штыря и 3) имя IRQ. Тогда я надеюсь создать функцию предварительного процессора, которая приведет к генерации всех этих макросов. Что-то вроде:
#define MAKE_INTERRUPT_MACROS(module, port, pin, irq_num) \
#define module##_IRQ_pin PORT##port##_PIN(##pin##) \
#define module##_IRQ_IN_REGISTER GPIO_P##port##IN \
#define module##_IRQ_NUMBER GPIO_IRQ##irq_num \
#define module##_IRQ_INTCFG_REG GPIO_INTCFG##irq_num
Есть ли законный способ получить proprocessor сделать что-то, как выше, где одна функция препроцессора вызывает генерацию множества других макросов на основе параметров, передаваемых в функцию?
Вы не можете использовать '# define' в макро –
HTTP: // EN .wikibooks.org/wiki/C_Programming/Preprocessor # X-Macros – Mat
Нужно ли это все макросы? Вы просто могли бы объявить их как «статические» объекты const. Если определение и инициализация видны в файле заголовка, это должно быть так же хорошо, как макрос. –