C语言中的函数式宏与控制流变化
1. 函数式宏
函数式宏是C语言中一种强大的工具,它比内联函数更加灵活。下面介绍两个重要的函数式宏:TRACE_POINTER和TRACE_CONVERT。
TRACE_POINTER宏定义如下:
#define TRACE_POINTER(X) \ _Generic((X)+0LL, \ unsigned long long: 0, \ long long: 0, \ float: 0, \ double: 0, \ long double: 0, \ default: (X))这个宏的优点是,对TRACE_POINTER(X)的调用总是可以赋值给void*指针。如果X本身是指针,那么它可以直接赋值给void*;如果X是其他算术类型,宏调用的结果为 0。
在此基础上,TRACE_CONVERT宏的定义如下:
/** ** @brief Returns a value that is promoted either to a wide ** integer, to a