#define OP2(_1, _2, _op) (\ {\ typeof(_1) __1; typeof(_2) __2; (void)(&__1 == &__2);\ __builtin_constant_p(_1) ? \ (__builtin_constant_p(_2) ? _op(_1, _2) : ({__2 = _2; _op(_1, __2);})) : \ (__builtin_constant_p(_2) ? ({__1 = _1; _op(__1, _2);}) : ({__1 = _1; __2 = _2; _op(__1, __2);}));\ })
时间: 2024-03-29 13:35:00 浏览: 109
C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别
5星 · 资源好评率100%
这也是一个宏定义,用于对两个参数进行二元运算。其中,_1和_2表示两个参数,_op表示二元运算符。该宏定义的作用是:如果其中一个参数是常量,则将其作为宏的值直接计算,否则将参数赋值给新定义的变量__1和__2,然后再进行运算。整个宏定义使用了GCC的内置函数__builtin_constant_p来判断参数是否是常量。最终返回运算结果。
阅读全文