首先是一段代码:
int counter = 0;
int get_counter() { return counter++; }
#define EVEN_OR_ZERO(cc) ( (cc) % 2 == 0 ? (cc) : 0 )
int next_even_or_zero = EVEN_OR_ZERO(get_counter());
这段代码可能看起来没问题,但是......让我们展开这个宏:
int next_even_or_zero = get_counter() % 2 == 0 ? get_counter() : 0;
如您所见,宏只会返回奇数 - 这与预期(或期望)相反。
问题:是否有任何方法可以使用宏按预期方式完成这项工作?还是常规功能是唯一的出路?
//This works as wanted
int even_or_zero(int value) { return value % 2 == 0 ? value : 0; }
最佳答案
#define EVEN_OR_ZERO(cc) even_or_zero(cc)
这可能是一个完美的答案,也可能是一个糟糕的笑话,具体取决于您为什么需要一个宏,但您没有告诉我们。
关于c++ - 函数调用作为 C 宏的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012991/