Получение имен символов в C - PullRequest
0 голосов
/ 24 октября 2018

Я успешно создал макрос на ассемблере, который я использую для создания 32 независимых подпрограмм в исходном файле сборки.Процедуры следуют за целевой системой ABI.Их экспортированные имена символов практически идентичны, за исключением суффикса конечного числа.Вот извлечение символа из собранного объектного файла (многоточие, указывающее непрерывный шаблон).

$ nm default_handler.o | sort
...
00000058 T exception_default_handler_5
0000005f T exception_default_handler_6
00000066 T exception_default_handler_7
0000006d T exception_default_handler_8
00000072 T exception_default_handler_9
00000079 T exception_default_handler_10
0000007e T exception_default_handler_11
00000083 T exception_default_handler_12
00000088 T exception_default_handler_13
...

У меня также есть программа на C, в которой мне нужно ссылаться на каждую из этих отдельных подпрограмм.В некоторых частях программы на C мне нужно ссылаться на все процедуры сборки одновременно, чтобы хранить указатель каждого из них в массиве.Вот необходимый код, необходимый для понимания моей проблемы (с многоточием для обозначения продолжающегося паттерна).Этот код выполняет задачу, указанную выше.

{
    ...
    extern void exception_default_handler_5(void);
    extern void exception_default_handler_6(void);
    extern void exception_default_handler_7(void);
    ...

    ...
    array[5] = exception_default_handler_5;
    array[6] = exception_default_handler_6;
    array[7] = exception_default_handler_7;
    ...
}

С 64 строками этого подхода;золотое правило кодирования , всегда пишущее читаемый и поддерживаемый код, очевидно, было нарушено.То, что я хотел бы, это способ автоматизировать этот процесс создания внешнего предварительного объявления и помещения его экземпляра в массив, чтобы минимизировать ошибки, которые могут произойти при дублировании кода.

Я думаючто, возможно, это работа для C-макросов, но я не могу придумать, как сделать это с ними.

Есть мысли?

...