对接触过面向对象程序设计的程序员来讲,相信各位对泛型编程并不陌生。在 C11 标准中,_Generic 关键字可以让 C 语言也如同 等面向对象程序设计语言一样,使其支持轻量级的泛型编程设计。
利用 _Generic 关键字,可以简单地将一组具有不同类型却有相同功能的函数抽象为一个统一的接口,语法形式如下:
generic-selection:
_Generic (assignment-expression, generic-assoc-list)
generic-assoc-list:
generic-association
generic-assoc-list , generic-association
generic-association:
type-name : assignment-expression
default : assignment-expression
与 sizeof 与 typeof 类似,_Generic 中的 assignment-expression 只用于在编译时获得该表达式的类型,而不会对该表达式做运行时计算,如以下代码所示。
#include #include #include #include #define getTypeName(x) _Generic((x), _Bool:"_Bool", char: "char", signed char: "signed char", unsigned char: "unsigned char", short int: "short int", unsigned short int: "unsigned short int", int: "int", unsigned int: &#