我需要一个宏,每次替换时都会跟踪这种替换的数量, 这样做的目的是在宏扩展达到certan整数的倍数时进行不同的宏扩展。没有运行时开销是可以接受的。(我不能使用内联函数,如果条件检查等。)
我尝试__COUNTER__
如下:
#define ABC() (__COUNTER__ > 5)? printf("\n hello"): printf("\n ok").
但是当此宏处于循环中时,__COUNTER__
不起作用。
上面的printf仅用作示例。
请注意,宏在时间关键上下文中扩展,并且函数开销不可接受以及汇编中的条件分支,使用上面的三元运算符,因为生成的汇编包含条件指令而不是条件分支。
任何其他方法,建议?
答案 0 :(得分:-1)
如果计数要求很低,你可以避免使用数组和函数指针的分支。
typedef void(*Func)(void);
typedef struct {
Func run;
int next;
} Element;
void first(void) {
printf("\n hello");
}
void second(void) {
printf("\n ok");
}
Element array[] = {
{ first, 1 },
{ first, 2 },
{ first, 3 },
{ first, 4 },
{ second, 4 }
};
int i = 0;
#define ABC() \
do { \
array[i].run(); \
i = array[i].next; \
} while(0)