亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言泛型選擇編程示例詳解

 更新時間:2023年09月15日 09:02:50   作者:不停感嘆的老林  
這篇文章主要介紹了C語言泛型選擇編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

相比C++模板, C語言進(jìn)行泛型編程沒有天然優(yōu)勢, 但并不意味著不能打.

自C11起, C語言已經(jīng)提供泛型選擇功能, 也就是通過系統(tǒng)特性, 不那么順暢, 但是也勉強可以做一定的泛型了.

同時由于void*的類型抹除性質(zhì), 可以做類似C++標(biāo)準(zhǔn)庫泛型算法的偽泛型函數(shù).

一、_Generic關(guān)鍵字

_Generic是C11的新特性, 它能根據(jù)變量類型, 選擇要執(zhí)行的表達(dá)式,

_Generic(expression, type1: code block1, type2: code block2, ..., default: code blockn)

比如最簡單的, 打印一個可能是int, 也可能是float 的值:

#include <stdio.h>
#define print(f)                                                               \
    if (_Generic(f, int: 0, float: 1))                                         \
    {                                                                          \
        printf("float = %f\n", f);                                             \
    }                                                                          \
    else                                                                       \
    {                                                                          \
        printf("int = %d\n", f);                                               \
    }
int main()
{
    float f = 5.5F;
    print(f);
    int i = 9;
    print(i);
    return 0;
}

相比C++, 以上代碼需要用宏模擬泛型, 比較令人詬病的是debug比較困難, 而且本質(zhì)上這種泛型沒有減少代碼量, 也不夠自動, 簡單代碼好說, 復(fù)雜代碼就比較麻煩了.

二、類型抹除偽泛型

最為典型的是C標(biāo)準(zhǔn)庫的qsort()函數(shù), 通過將數(shù)組類型抹除為void*, 可以傳入任何類型數(shù)組, 通過特定的比較函數(shù), 確定類型, 實現(xiàn)泛型功能.

qsort(void *Base,                                      // 數(shù)組地址
          size_t NumOfElements,                            // 元素數(shù)量
          size_t SizeOfElements,                           // 元素大小
          int (*PtFuncCompare)(const void *, const void *) // 比較函數(shù)
    );

這個用_Generic恐怕就會非常繁瑣了, 雖然可以少一個元素大小的參數(shù).

總結(jié)

現(xiàn)在不能說C語言沒有泛型功能了,只不過和C++相比, 還是有點繁瑣, 困難, 難以debug, 但以C的性格, 能加入這種特性, 已經(jīng)是很給面子了.

以上就是C語言泛型選擇編程示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言泛型選擇的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論