衡阳派盒市场营销有限公司

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

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

3天內不再提示

使用C語言實現函數模板

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-11-09 11:38 ? 次閱讀

C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?

放在C語言里面,確實比較困難。

我們先來看看C++的解決方案。

#include 


template 
T add(T x, T y)
{
    return x + y;
}


int main()
{
    std::cout << add(1, 2) << std::endl;  //顯式調用
    std::cout << add(1.1, 2.2) << std::endl;   //隱式調用


    return 0;
}

C++有個重要的概念叫做模板,所謂模板,就是通用的意思。

不管是整數的相加,還是浮點數的相加,代碼都是一樣的,唯一的區別就是類型,參數的類型以及返回值的類型。

那就干脆用一種通用的類型來代替,這個類型暫且就叫 T。

這樣的代碼如果直接拿來編譯,編譯器肯定會提示 T 這種類型不能識別,畢竟它不是標準的類型。

所以還需要在上面加一行代碼,專門告訴編譯器,T 是一種類型。

調用函數的時候,可以顯示指定類型,也可以讓編譯器自己去分析,這就是 C++ 中的函數模板。

單從功能上來說,確實給用戶提供了極大的方便。

再回到C語言上,C語言并沒有函數模板的概念,唯一能接近函數模板的方式,可能就是使用 _Generic 關鍵字。

#include 


int add_int(int x, int y)
{
    return x + y;
}


double add_double(double x, double y)
{
    return x + y;
}


#define ADD(X, Y) _Generic((X), int : add_int(X, Y),
                                double : add_double(X, Y))
                                
int main()
{
    printf("%d
", ADD(1, 2));
    printf("%lf
", ADD(1.1, 2.2));
    
return 0;
}


?Generic 關鍵字可以判斷參數 x 的類型,根據類型去匹配相應的函數,如果不看這些代碼,從使用的角度,確實有點函數模板的意思。

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

    關注

    180

    文章

    7614

    瀏覽量

    137702
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62968
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73854

原文標題:C語言實現函數模板

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

收藏 人收藏

    評論

    相關推薦

    如何用C語言實現面向對象編程

    、組合、多態等面向對象的功能,但C語言有struct和函數指針。我們可以用struct中的數據和函數指針,以此來模擬對象和類的行為。所以在正式開始設計模式前,先看看如何用
    發表于 07-12 07:24

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

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

    C語言實現DES算法

    C語言實現DES算法 本DES算法,使用了效率很高的C完成。目前,國內知名企業的POS終端中,單DES算法,均是采用這個函數完成。函數
    發表于 01-16 10:09 ?3277次閱讀

    DSP算法的c語言實現

    DSP算法的c語言實現,又需要的朋友下來看看。
    發表于 05-09 10:59 ?0次下載

    轉載一篇MSP430中斷c語言函數模板

    轉載一篇MSP430中斷c語言函數模板包括了基本模塊的所有中斷模板,感興趣的小伙伴們可以看看。
    發表于 07-26 11:11 ?3次下載

    C語言實現數字濾波

    C語言實現數字濾波 。對數值進行精度調整,下面給出幾種常用的數字濾波方法的C語言函數,這些函數
    發表于 07-26 15:44 ?10次下載

    PID控制算法的C語言實現(完整版)

    PID控制算法的C語言實現一 PID算法原理
    發表于 11-05 15:45 ?0次下載

    4個重要算法C語言實現源代碼

    4個重要算法C語言實現源代碼
    發表于 06-10 08:00 ?12次下載

    C語言實用教程之函數的詳細資料說明

    本文檔詳細介紹的是C語言實用教程之函數的詳細資料說明主要內容包括了:1程序設計的藝術性,2函數的定義與使用,3函數的作用域和存儲類型,4.預
    發表于 02-26 14:43 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言實</b>用教程之<b class='flag-5'>函數</b>的詳細資料說明

    使用C語言實現圖書館管理系統的源代碼和函數及軟件等資料合集

    本文檔的主要內容詳細介紹的是使用C語言實現圖書館管理系統的源代碼和函數及軟件等資料合集
    發表于 03-03 08:00 ?9次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語言實現</b>圖書館管理系統的源代碼和<b class='flag-5'>函數</b>及軟件等資料合集

    C++之函數模板的概念及意義

    一、函數模板的引出:1、c++中有幾種交換變量的方法:(1)定義宏代碼塊(2)定義函數代碼版本一:#include <iostream>#include <string>using namespace
    的頭像 發表于 12-24 15:58 ?909次閱讀

    累加校驗和C語言實現

    累加校驗和C語言實現
    發表于 11-29 18:06 ?10次下載
    累加校驗和<b class='flag-5'>C</b><b class='flag-5'>語言實現</b>

    怎么用C語言實現多態

    這里我想主要介紹下在C語言中是如何實現的面向對象。知道了C語言實現面向對象的方式,我們再聯想下,C
    的頭像 發表于 10-12 09:12 ?2103次閱讀

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1072次閱讀
    百家乐15人桌| 娱乐城百家乐打不开| 波音百家乐| 缅甸百家乐娱乐场开户注册| 百家乐官网游戏接口| 998棋牌游戏| 百家乐赌场代理合作| 玩百家乐官网输了| 治多县| 百家乐博彩吧| 百家乐经验在哪找| 百家乐官网网站赌博| 盛世国际,| 老虎百家乐的玩法技巧和规则| 太阳百家乐官网代理| 百家乐官网游戏玩法规则| 香港六合彩挂牌| 互联网百家乐的玩法技巧和规则| 汇丰百家乐官网娱乐城| 百家乐官网平注法技巧| 博九| 老虎机作弊器| 百家乐赌场技巧大全| 梦幻城百家乐官网的玩法技巧和规则 | 百家乐官网平台哪个比较安全 | 澳门百家乐新濠天地| 喜达百家乐官网的玩法技巧和规则 | 澳门百家乐海洋阿强| 百家乐官网娱乐场开户注册| 百家乐官网博彩博彩网| 亲朋棋牌游戏下载| 金赞百家乐的玩法技巧和规则 | 百家乐稳赢投注| 精通百家乐官网的玩法技巧和规则 | 网上玩百家乐犯法| 电子百家乐官网打法| 菲律宾沙龙国际| 大发888真钱棋牌| 百家乐有无技巧| 真人百家乐宣传| 如何胜百家乐官网的玩法技巧和规则 |