Han*_*Sun 3 c generics function
我是C的新手..我想知道如果我有这样的三个阵列:
int a[] = {1, 2, 3}
char b[] = {'a', 'c', 'k'}
float c[] = {4.5, 5.8}
Run Code Online (Sandbox Code Playgroud)
是否可以编写一个可以打印这些数组中的任何一个的多态函数?
prarray(a); prarray(b); prarray(c);
Run Code Online (Sandbox Code Playgroud)
这个表格也可以接受:
prarray(a, int); prarray(b, char); prarray(c, float)
Run Code Online (Sandbox Code Playgroud)
有可能计算出这个功能void prarray(void *)吗?有没有人有任何想法?
最新的C标准是C11(C 2011).
它提供关键字_Generic(§6.5.1.1通用选择,在§6.5表达式下)来做你要求的那种事情.
例如,
#define prarray(A, len) _Generic((A), \
int: prarray_int, \
char: prarray_char, \
float: prarray_float, \
)(A, len)
void prarray_int( int* a, ptrdiff_t len ) { ... }
void prarray_char( char* a, ptrdiff_t len ) { ... }
void prarray_float( float* a, ptrdiff_t len ) { ... }
Run Code Online (Sandbox Code Playgroud)
现在您需要做的就是获得C11编译器!:-)
或者更多地手动执行C11宏的工作 - 实际上,将类型的名称作为显式宏参数传递,然后使用##标记粘贴来生成函数名称.
免责声明:未经测试的代码(我没有C11编译器),而且,自1990年代末以来我没有使用过C语言.