c++ - 函数调用作为 C 宏的参数

标签 c++ c function macros arguments

首先是一段代码:

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/

相关文章:

c - C中的 "Real Types"和 "Arithmetic Types"有什么区别?

c - 没有括号的 If 语句

c++ - Wix:从 C++ 自定义操作添加到列表框

c++ - QStatusBar->showMessage() 的问题

c++ - 乍一看,构造函数返回一个对象

c - 使用 char* a[] 与 char a[][]

python:运行超时函数(并获得返回值)

C++ 将对象传递给函数

c++ - 如何将函数作为参数传递?

c++ - 将字符串转换为 double 函数