[英]Give type as argument like va_arg in C
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*
的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.