2013-02-25 58 views
-3

我第一次遇到這個名爲通用庫的術語,我無法理解通用庫的含義。什麼是C中的通用庫?

+1

在C++中,泛型機制被稱爲「模板」。只要提一下,這樣你就可以做更好的研究並改進問題。 – 2013-02-25 11:38:49

+1

@NiklasB,泛型不一定是指模板。它可能是「通用聲音處理庫」。 OP需要澄清他聽到的情況。 – 2013-02-25 11:40:54

+1

@NiklasB .: C89沒有泛型。現代C(最新標準)具有泛型。或者,那個標準叫泛型的東西 – 2013-02-25 11:42:06

回答

2

通用庫是一種可以與多種類型一起使用的庫。多個號碼類型的詳細

在C11

一個通用的定義可以是這樣的:

#define cbrt(X) _Generic((X), long double: cbrtl, \ 
           default: cbrt, \ 
           float: cbrtf)(X) 
在早期版本的下1

不得不使用剛剛各項宏觀弄虛作假,如如SO question referred to by @user1929959中所示the commentary

+0

和'void *'的定義是另一種方法... – deepmax 2013-02-25 11:47:37

+0

你能不能指出你正在顯示的代碼的解釋?語法看起來很尷尬(我不熟悉c11),我無法得出它的意圖。 – 2013-02-25 11:49:24

+0

@MM .:是的,一種手段爲了同一目的,但我從來沒有聽說過這種方法稱爲通用代碼。不同之處在於客戶端代碼之一是通過'void *'進行投射,而不是通過宏隱藏並且通過集中測試來保證安全 – 2013-02-25 11:50:04

0

「Generic」在這裏可能是指「參數化數據類型」(來自Java?)。唉,C在處理(數據)類型方面非常薄弱 - 就「類型安全」而言。因此,C中的常用方法是使用回調函數參數化一個算法,您必須實現該算法才能執行類型特定的工作。數據本身通常由void*表示。

舉個例子,你可以看看在C-標準功能qsort(從人排序):

#include <stdlib.h> 

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

base是一個「通用的」指針數據,nmembsize是附加有關您的數據和compar的信息將是必須提供的回調函數,以便能夠比較數據類型的兩個元素。

有很多庫爲您提供算法。這個數字是如此之大以至於你需要指定...