RM新时代网站-首页

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

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

3天內(nèi)不再提示

使用C語言實現(xiàn)函數(shù)模板

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

C語言能不能實現(xiàn)一個通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點數(shù)的相加?

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

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

#include 


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


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


    return 0;
}

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

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

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

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

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

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

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

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

#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 關(guān)鍵字可以判斷參數(shù) x 的類型,根據(jù)類型去匹配相應的函數(shù),如果不看這些代碼,從使用的角度,確實有點函數(shù)模板的意思。

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

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136683
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618

原文標題:C語言實現(xiàn)函數(shù)模板

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

收藏 人收藏

    評論

    相關(guān)推薦

    如何用C語言實現(xiàn)面向?qū)ο缶幊?/a>

    、組合、多態(tài)等面向?qū)ο蟮墓δ?,?b class='flag-5'>C語言有struct和函數(shù)指針。我們可以用struct中的數(shù)據(jù)和函數(shù)指針,以此來模擬對象和類的行為。所以在正式開始設計模式前,先看看如何用
    發(fā)表于 07-12 07:24

    C語言實現(xiàn)的泛型函數(shù)swap()

    C語言實現(xiàn)的泛型函數(shù)swap():交換兩個變量中的數(shù)據(jù).
    發(fā)表于 01-20 07:10

    C語言實現(xiàn)DES算法

    C語言實現(xiàn)DES算法 本DES算法,使用了效率很高的C完成。目前,國內(nèi)知名企業(yè)的POS終端中,單DES算法,均是采用這個函數(shù)完成。函數(shù)經(jīng)
    發(fā)表于 01-16 10:09 ?3269次閱讀

    DSP算法的c語言實現(xiàn)

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

    轉(zhuǎn)載一篇MSP430中斷c語言函數(shù)模板

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

    C語言實現(xiàn)數(shù)字濾波

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

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

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

    C++語言實現(xiàn)火車排序功能

    C++語言實現(xiàn)火車排序功能
    發(fā)表于 01-05 11:27 ?2次下載

    4個重要算法C語言實現(xiàn)源代碼

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

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

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

    使用C語言實現(xiàn)圖書館管理系統(tǒng)的源代碼和函數(shù)及軟件等資料合集

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

    C++之函數(shù)模板的概念及意義

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

    累加校驗和C語言實現(xiàn)

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

    怎么用C語言實現(xiàn)多態(tài)

    這里我想主要介紹下在C語言中是如何實現(xiàn)的面向?qū)ο蟆V懒?b class='flag-5'>C語言實現(xiàn)面向?qū)ο蟮姆绞?,我們再?lián)想下,C
    的頭像 發(fā)表于 10-12 09:12 ?2039次閱讀

    使用C語言實現(xiàn)的CRC計算單元的例子

    使用C語言實現(xiàn)的CRC計算單元的例子
    的頭像 發(fā)表于 05-16 16:16 ?958次閱讀
    RM新时代网站-首页