色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言是否支持泛型編程?

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-10-16 10:02 ? 次閱讀

C語言是否支持泛型編程?毫無疑問,答案是不支持。

什么是泛型編程,我覺得用C++里面的模板可以很好的說明。

#include


//函數模板
template 
void add(T x, T y)
{
    std::cout << x + y << std::endl;
}


int main()
{
    add(1, 2);
    add(1.11f, 2.22f);


    return 0;
}
比如函數add就是一個模板函數,它既能支持整數的相加,也能支持浮點數的相加,甚至是其他的自定義類型,只要能提供相加的規則,編譯器都能通過。

泛型編程可以大大的提高編程的效率。

C語言本身并不支持泛型,好在C11標準后,新增了關鍵字_Generic,它可以支持輕量級的泛型編程。

_Generic的作用,如果用一句話來描述,就是可以獲得變量的類型。

大家可以想一下,在C語言里面,好像確實沒有什么方法能獲得一個變量的類型。

比如int a,用戶確實可以知道 a 是 int 類型,但是如果想要通過代碼來計算出 a 的類型,好像確實比較麻煩。

_Generic就解決了這個問題,寫個簡單的代碼看下。
#include 


int main()
{
    int a;


    printf("%s
", _Generic((a), int : "int", char : "char"));


    return 0;
}
第一個表達式就是變量a,后面依次跟上可能的類型,如果是int類型,就輸出int,如果是char類型,就輸出char。

為了看起來簡單一些,我這里就寫兩個。

運行程序,確實輸出的就是int。 如果把代碼寫的完整一些,可以來一個宏定義,然后把常見的類型都寫在后面,當然,指針也沒有問題。
#include 


#define TYPE_NAME(val) _Generic((val), int : "int", 
                                       char : "char", 
                                       short : "short", 
                                       float : "float", 
                                       double : "double", 
                                       int * : "int *", 
                                       default : "unkown")


int main()
{
inta;
    char b;
    int *c;
    double d;


    printf("%s
", TYPE_NAME(a));
    printf("%s
", TYPE_NAME(b));
    printf("%s
", TYPE_NAME(c));
    printf("%s
", TYPE_NAME(d));


    return 0;
}
再次運行程序,這樣得到的結果就會更豐富一些。

有了這個基礎,我們再來看下如何用它實現所謂的泛型編程。

比如還是實現兩個數字的相加。

先來兩個函數,因為C語言不支持函數重載,所以函數名得不一樣,一個叫add_int,一個叫add_float。
int add_int(int a,int b)
{
    printf("%d + %d = %d
",a,b,a+b);
    return a+b;
}


float add_float(float a,float b)
{
    printf("%f + %f = %f
",a,b,a+b);
    return a+b;
}


void unsupport()
{
    printf("unsupport type
");
}
然后來一個宏定義,根據第一個參數的類型來匹配到底調用哪個函數。
#define ADD(x,y) _Generic((x),
    int:add_int(x,y),
    float:add_float(x,y),
    default:unsupport())
主函數里面調用ADD函數,參數既可以是int,也可以是float。
int main()
{
    ADD(1, 2);
    ADD(1.11f, 2.22f);


    return 0;
}
運行程序,確實也能達到C++函數模板的效果。
root@Turbo:test# ./1 
1 + 2 = 3
1.110000 + 2.220000 = 3.330000
root@Turbo:test#







審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136692
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    6989

原文標題:C語言實現泛型編程

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解Rust的

    所有的編程語言都致力于將重復的任務簡單化,并為此提供各種各樣的工具。在 Rust 中,(generics)就是這樣一種工具,它是具體類型或其它屬性的抽象替代。在編寫代碼時,我們可以
    發表于 11-12 09:08 ?1058次閱讀

    Golang的使用

    眾所周知很多語言的function 中都支持 key=word 關鍵字參數, 但 golang 是不支持的, 我們可以利用去簡單的實現。
    發表于 08-16 12:24 ?279次閱讀

    Java的背景和作用

    Java的背景和作用 Java是Java編程語言中的一個特性,引入
    的頭像 發表于 09-20 14:30 ?1076次閱讀
    Java<b class='flag-5'>泛</b><b class='flag-5'>型</b>的背景和作用

    C語言簡介--學前必備知識 精選資料推薦

    關鍵字32個關鍵字:CC++的關系C++支持面向過程編程、面向對象編程
    發表于 07-22 07:51

    詳細介紹了Java、注解、并發編程

    介紹了Java、注解、并發編程、數據傳輸與序列化、高效IO、容器集合、反射與類加載以及JVM重點知識線程、內存模型、JVM運行時內存、垃圾回收與算法、Java中四種引用類型、GC 分代收集算法
    發表于 08-20 06:09

    C語言編程是如何實現對數組中元素的線性搜索的

    C語言編程,實現對數組中元素的線性搜索。
    發表于 01-20 06:36

    C語言實現的型函數swap()

    C語言實現的型函數swap():交換兩個變量中的數據.
    發表于 01-20 07:10

    STM8的C語言編程說明

    STM8的C語言編程說明STM8的C語言編程說明STM8的C
    發表于 12-10 16:19 ?37次下載

    C語言入門經典-C語言編程

    C語言入門經典-C語言編程,感興趣的可以看看哦。
    發表于 08-16 18:54 ?126次下載

    聊聊java實現的原理與好處

    摘要: 和C++以模板來實現靜多態不同,Java基于運行時支持選擇了,兩者的實現原理大相庭徑。C++可以
    發表于 09-27 16:50 ?0次下載

    C++設計新思維-編程與設計之應用

    C++設計新思維-編程與設計之應用
    發表于 11-16 15:59 ?3次下載

    微軟公布 .NET編程語言支持策略C#、F#和Visual Basic

    微軟在 .NET 平臺上提供了對 3 種編程語言支持 —— C#、F# 和 Visual Basic。近日它公布了針對每種語言的最新
    的頭像 發表于 02-14 11:28 ?1357次閱讀

    鴻蒙語言TypeScript學習第18天:【

    (Generics)是一種編程語言特性,允許在定義函數、類、接口等時使用占位符來表示類型,而不是具體的類型。
    的頭像 發表于 04-16 14:56 ?369次閱讀
    鴻蒙<b class='flag-5'>語言</b>TypeScript學習第18天:【<b class='flag-5'>泛</b><b class='flag-5'>型</b>】

    Orin芯片的編程語言支持

    語言支持 Orin芯片支持多種編程語言,以滿足不同開發者的需求。其中,C/
    的頭像 發表于 10-27 16:45 ?269次閱讀

    NPU支持編程語言有哪些

    NPU(Neural Processing Unit)是一種專門為深度學習和人工智能應用設計的處理器。NPU支持編程語言通常與它所集成的平臺或框架緊密相關。以下是一些常見的編程
    的頭像 發表于 11-15 09:21 ?605次閱讀
    主站蜘蛛池模板: 无遮掩H黄纯肉动漫在线观看星| 亚洲高清视频在线观看| 性欧美xxxxporn| 在线观看日本污污ww网站| 成年女人免费影院播放| 国产在线公开视频| 男人的天堂黄色| 无人区乱码1区2区3区网站 | 992交通广播| 国产露脸无码A区久久| 老司机福利在 线影院| 十八禁啪啦啪漫画| 中文国产在线观看| 国产精品XXXXX免费A片| 毛片网站在线观看| 小舞被爆操| SM双性精跪趴灌憋尿调教H| 挤奶门事件完整照片| 日日噜噜夜夜爽爽| 最近中文字幕MV高清在线视频| 国产h视频免费观看| 久久亚洲视频| 亚洲薄码区| 超碰久久国产vs| 老师真棒无遮瑕版漫画免费| 午夜免费体验30分| 99久久国产视频| 久久精品国产欧美日韩99热| 视频成人app永久在线观看| 99精产国品一二产区在线| 精品国产mmd在线观看| 呻吟翘臀后进爆白浆| 99久久国产露脸精品国产麻豆| 久久国产精品无码视欧美| 无码AV动漫精品一区二区免费| av在线色| 伦理片在线线手机版韩国免费6| 亚洲精品高清在线| 国产精品久久久久久免费播放| 欧美三级黄色大片| 最近的2019中文字幕国语完整版 |