c - 将符号名称输入 C
问题描述
我已经成功地生成了一个汇编器宏,我用它来在汇编源文件中实例化 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 宏的一项工作,但我无法找到一种方法来处理它们。
有什么想法吗?
解决方案
推荐阅读
- html - 引导滑块位于导航栏后面
- mysql - 最后一个 CSV 列中的 MySQL NULL 可能
- typescript - 通过对象类型联合将值传递给方法
- python - 基于python中2个短序列的存在过滤行
- android - 为什么我在 Flutter 中的原生 android 代码显示错误?
- r - R栅格时间序列堆栈循环统计
- sql - 在查询中使用纬度经度对计算距离
- android - 在 Dagger/MVP 应用程序中放置业务逻辑的位置
- tensorflow - 如何将 TensorFlow 模型转换为 .mlmodel?
- javascript - FullCalendar Spring MVC