[英]concatenate macros in c in a loop
我想连接很多宏,以便将它们作为参数传递给被击中的数组。 更具体地说,我有这个结构
static struct
{
unsigned int num_irqs;
volatile __int_handler *_int_line_handler_table;
}_int_handler_table[INTR_GROUPS];
我想将一系列宏作为num_irqs
参数传递
AVR32_INTC_NUM_IRQS_PER_GRP1
AVR32_INTC_NUM_IRQS_PER_GRP2
...
首先我想使用此代码
for (int i=0;i<INTR_GROUPS;i++)
{
_int_handler_table[i].num_irqs = TPASTE2(AVR32_INTC_NUM_IRQS_PER_GRP,i);
}
但每次都将i
当作char
而不是特定值。 我还看到在preprocessor.h中定义了一个MREPEAT
宏,但是我不理解如何从示例中使用它。
任何人都可以解释使用MREPEAT
或进行上述操作的其他方式。
C不能那样工作。
宏只是在编译时发生的文本替换。 您无法编写代码来构造宏名称,这没有任何意义。 运行代码时,编译器不再存在。
除非代码量很大(在这种情况下,代码生成是一种常见的解决方案),否则您可能应该只手动执行此操作。
请记住,预处理器(用于处理宏) 在编译器之前运行。 这意味着要操纵最终的源代码以提交给编译器。
因此,它不知道什么值具有变量。 对于预处理器, i
表示i
。
您尝试执行的操作有些复杂,尤其要记住预处理器无法生成预处理器指令。
但是它可以生成常量。 说到这,对于您的用例,我更喜欢使用常量表,例如:
const int AVR32_INTC_NUM_IRQS_PER_GRP[] = { 1, 2, 3, 4, 5 };
for (int i=0;i<INTR_GROUPS;i++)
{
_int_handler_table[i].num_irqs = TPASTE2(AVR32_INTC_NUM_IRQS_PER_GRP[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.