带lambda参数的宏定义

我们知道有些宏的参数是表达式,在DEBUG启用的使用,可以输出一些日志,在RELEASE的时候,可以节省性能。

如下的宏定义是基于lambda表达式,可以处理一些复杂的逻辑。

 

#ifdef debug
#define macro(labmda)                      \
    do {                                   \
        labmda;                            \
    } while (0)
#define macro_call(labmda) macro(labmda())
#else
#define macro(labmda)
#define macro_call(labmda)
#endif
#include <stdio.h>
int main(int argc, char *argv[]) {
    int x = 100;
    macro([&]() { printf("hello %d\n", x); }());
    macro([](int x) { printf("hello %d\n", x); }(x));
    return 0;
}

  

posted @ 2019-10-28 17:46  westfly  阅读(687)  评论(0编辑  收藏  举报