C 语言中的宏与控制流详解
类函数宏
在 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宏的定义如下:
#define TRACE_CONVERT(X) \ _Generic((X)+0LL, \ unsigned long long: