va_arg(a,type)
宏扩展为__builtin_va_arg(a,type)
编译器的内置部分。
是否可以实现基于类型的功能,如果可以,如何实现?
va_arg(a,type)
宏扩展为__builtin_va_arg(a,type)
编译器的内置部分。
是否可以实现基于类型的功能,如果可以,如何实现?
使用预处理器,您确实可以实现基于类型的功能,尽管它是有限的。不要忘记#define
指令与复制/粘贴一起使用,因此您无法比较 C 标准中的类型,例如 (*)。
但是,您可以重用type
参数来构建类型泛型函数。下面是一个min
泛型函数的例子:
#define DEFINE_MIN(type) \
int min_##type(type a, type b) \
{ return a < b ? a : b; }
顺便说一句,gcc
扩展 ,typeof
给出了表达式的类型(它不再依赖于程序员的参数)。此外,最近,C11_Generic
关键字允许您为不同类型的表达式编写不同的处理方式。
(*) 在 的情况下va_arg
,该type
参数通常用于获取 和 的type
大小type*
。