Как создать объявление нескольких функций в C? - PullRequest
1 голос
/ 07 августа 2020

Я хочу добавить 400 Interrupt_Handler в https://github.com/ARM-software/CMSIS_5/blob/develop/Device/ARM/ARMCM33/Source/startup_ARMCM33.c.

Механический подход состоит в том, чтобы добавить их следующим образом:

void Interrupt10_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
void Interrupt11_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
void Interrupt12_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
....
void Interrupt400_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));

Есть ли альтернативный способ добавить их? Что-то вроде следующего?

for($i=0;$i<=400;$i++) {
void Interrupt$i\_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
}

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Вы можете сделать это с помощью макроса. Первый шаг - заменить i в имя

#define X(i) void Interrupt##i##_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));

Следующий шаг - вызвать макрос 400 раз. Можно без 400 строк использовать рекурсивные макросы:

#define X2(i) X(i) X(i+1)
#define X4(i) X2(i) X2(i+2)
...
1 голос
/ 07 августа 2020

Нет в исходном коде. Но напишите 3 строчки C программу. Затем скопируйте и вставьте.

int main (void)
{
    for(int i = 0; i < 500; i++) printf("void Interrupt%d_Handler     (void) __attribute__ ((weak, alias(\"Default_Handler\")));\n", i);
    return 0;
}

https://godbolt.org/z/hnKznT

...