是否可以实现一个可以在C中打印任何类型的任何数组的函数?

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 *)吗?有没有人有任何想法?

Che*_*Alf 6

最新的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语言.