如何使用宏调用只有后缀差异的函数?

风2412

其实我用宏定义了256个中断向量,它们的名字就像isr_1()isr_2()等等。当我想将它们的地址放入向量数组时uint32_t handlers[256],我遇到了一个问题,即使用宏无法帮助我解决这些问题。

#define ISR(NUM) isr_##NUM
for(int i = 0; i < 256; i ++){
    handlers[i] = (uint32_t)&ISR(i);
}

但正如你所知,这是一个错误的代码。它将被扩展为:

for(int i = 0; i < 256; i ++){
    handlers[i] = (uint32_t)&isr_i;
}

没有任何名为isr_i(). 所以这是错误的。有没有办法解决这个问题?

保罗·鲁尼

该宏将不起作用,因为它仅在编译之前的预处理器执行期间执行简单的文本连接和替换。循环发生在运行时,因此 的值i在预处理器阶段不可用。

我建议不要使用宏来尝试自动化这样的工作。它很难阅读并迫使您为函数提供非描述性且难以区分名称。

只需使用简单的数组字面量就可以达到相同的效果。它更清晰,因为它不需要您在阅读代码时尝试并在脑海中想象宏替换的样子。它不会强迫您使用错误的函数名称,它还允许您在源代码中搜索函数名称并查看它们的使用位置。

所以与其

typedef <your-function-sig-here> handler_type;

handler_type handlers[] = 
{
    isr_1,
    isr_2,
    isr_3
}; 

256 个条目代表了相当大的数组,但我认为这样做仍然值得。如果您不介意基于数字的函数名称,则不会阻止在编译器之前运行的不同工具在其自己的标头中生成数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何使用Scala宏在具有通用类型参数的对象上调用函数?

来自分类Dev

如何使用Scala宏在具有通用类型参数的对象上调用函数?

来自分类Dev

带有特殊前缀/后缀的调用函数

来自分类Dev

如何使用可变参数宏来调用嵌套构造函数?

来自分类Dev

只有一个选项时,如何调用或执行ajax的change函数

来自分类Dev

类型'()'不符合'视图'; 只有struct / enum / class类型可以符合使用swift ui调用调用函数的协议

来自分类Dev

如何在VBA中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

来自分类Dev

后缀表示法是否只有答案?

来自分类Dev

如何在C ++ 11样式的构造函数调用中使用C样式的宏?

来自分类Dev

从宏调用函数

来自分类Dev

如何正确使用可变参数宏调用其他宏

来自分类Dev

如何使用R调用/执行imageJ宏?

来自分类Dev

如何使用xlwings从Python调用Excel宏?

来自分类Dev

我如何使用%include调用SAS宏

来自分类Dev

如何使用sas autos调用多个宏

来自分类Dev

调用没有括号的类似函数的宏吗?

来自分类Dev

带有延迟函数调用的 while 循环宏

来自分类Dev

调用一个函数,只有在加载其他函数时才调用 (JS/TS)

来自分类Dev

如何使用CMake声明类似宏的函数

来自分类Dev

如何使用宏在函数中放置代码?

来自分类Dev

在使用angular $ filter和带有Filter后缀的名称之间是否存在性能差异?

来自分类Dev

如何使用仅返回后缀数字的函数扩展NSString?

来自分类Dev

不带评估的函数调用的打印参数,不使用“宏”

来自分类Dev

在宏内调用宏函数的正确语法

来自分类Dev

为什么只有在函数定义后定义宏后,宏和具有相同名称的函数才能起作用?

来自分类Dev

Python:如何使用for循环调用所有函数?

来自分类Dev

如何在宏浏览器中隐藏该宏,只有管理员才能找到它?

来自分类Dev

当只有两次调用时,每个循环调用该函数四次

来自分类Dev

从宏调用函数的参数评估

Related 相关文章

  1. 1

    如何使用Scala宏在具有通用类型参数的对象上调用函数?

  2. 2

    如何使用Scala宏在具有通用类型参数的对象上调用函数?

  3. 3

    带有特殊前缀/后缀的调用函数

  4. 4

    如何使用可变参数宏来调用嵌套构造函数?

  5. 5

    只有一个选项时,如何调用或执行ajax的change函数

  6. 6

    类型'()'不符合'视图'; 只有struct / enum / class类型可以符合使用swift ui调用调用函数的协议

  7. 7

    如何在VBA中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

  8. 8

    后缀表示法是否只有答案?

  9. 9

    如何在C ++ 11样式的构造函数调用中使用C样式的宏?

  10. 10

    从宏调用函数

  11. 11

    如何正确使用可变参数宏调用其他宏

  12. 12

    如何使用R调用/执行imageJ宏?

  13. 13

    如何使用xlwings从Python调用Excel宏?

  14. 14

    我如何使用%include调用SAS宏

  15. 15

    如何使用sas autos调用多个宏

  16. 16

    调用没有括号的类似函数的宏吗?

  17. 17

    带有延迟函数调用的 while 循环宏

  18. 18

    调用一个函数,只有在加载其他函数时才调用 (JS/TS)

  19. 19

    如何使用CMake声明类似宏的函数

  20. 20

    如何使用宏在函数中放置代码?

  21. 21

    在使用angular $ filter和带有Filter后缀的名称之间是否存在性能差异?

  22. 22

    如何使用仅返回后缀数字的函数扩展NSString?

  23. 23

    不带评估的函数调用的打印参数,不使用“宏”

  24. 24

    在宏内调用宏函数的正确语法

  25. 25

    为什么只有在函数定义后定义宏后,宏和具有相同名称的函数才能起作用?

  26. 26

    Python:如何使用for循环调用所有函数?

  27. 27

    如何在宏浏览器中隐藏该宏,只有管理员才能找到它?

  28. 28

    当只有两次调用时,每个循环调用该函数四次

  29. 29

    从宏调用函数的参数评估

热门标签

归档