gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:49:06 24 4
gpt4 key购买 nike

我是 C 的新手。我想知道如果我有三个像这样的数组:

int a[] = {1, 2, 3}
char b[] = {'a', 'c', 'k'}
float c[] = {4.5, 5.8}

是否可以编写一个多态函数来像这样打印这些数组中的任何一个?

prarray(a); prarray(b); prarray(c);

这种形式也是可以接受的:

prarray(a, int); prarray(b, char); prarray(c, float)

是否可以计算出函数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 ) { ... }

现在您需要做的就是获得一个 C11 编译器! :-)

或者执行 C11 宏的工作,稍微手动一些 - 实际上,将类型名称作为显式宏参数传递,然后使用 ## 标记粘贴生成函数名称。

免责声明:未经测试的代码(我没有 C11 编译器),而且,我自 1990 年代末以来就没有使用过 C。

关于c - 是否可以实现一个可以在 C 中打印任何类型的任何数组的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com