什么是C中的通用库?

时间:2013-02-25 11:38:01

标签: c++ c data-structures

我第一次遇到这个称为通用库的术语,我无法理解通用库的含义。

2 个答案:

答案 0 :(得分:2)

通用库是可以与多种类型一起使用的库,例如,多个数字类型

在c11中,通用定义可能如下所示:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)
在早期版本的C中,只需要使用各种宏技巧,例如:如SO question referred to by @user1929959

中的the commentary所示

答案 1 :(得分:0)

“Generic”这里可能意味着“参数化数据类型”(来自Java?)。唉,C在处理(数据)类型方面非常弱 - 在“类型安全”的意义上。因此,C中的常用方法是使用回调函数对算法进行参数化,您必须实现该算法才能执行特定于类型的工作。然后,数据本身通常由void*表示。

作为示例,您可以查看C标准函数qsort(来自 man sort ):

#include <stdlib.h>

void qsort(void *base, size_t nmemb, size_t size,
           int(*compar)(const void *, const void *));

base是指向您数据的“通用”指针,nmembsize是有关您数据的其他信息,compar将是回调函数,你必须提供能够比较数据类型的两个元素。

有许多库为您提供算法。这个数字太大了,你需要指定......