欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言泛型選擇編程示例詳解

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

前言

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

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

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

一、_Generic關(guān)鍵字

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

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

比如最簡(jiǎn)單的, 打印一個(gè)可能是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ì)上這種泛型沒(méi)有減少代碼量, 也不夠自動(dòng), 簡(jiǎn)單代碼好說(shuō), 復(fù)雜代碼就比較麻煩了.

二、類型抹除偽泛型

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

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

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

總結(jié)

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

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

相關(guān)文章

最新評(píng)論