用C語(yǔ)言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
放在C語(yǔ)言里面,確實(shí)比較困難。
我們先來(lái)看看C++的解決方案。
#includetemplate 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++有個(gè)重要的概念叫做模板,所謂模板,就是通用的意思。
不管是整數(shù)的相加,還是浮點(diǎn)數(shù)的相加,代碼都是一樣的,唯一的區(qū)別就是類型,參數(shù)的類型以及返回值的類型。
那就干脆用一種通用的類型來(lái)代替,這個(gè)類型暫且就叫 T。
這樣的代碼如果直接拿來(lái)編譯,編譯器肯定會(huì)提示 T 這種類型不能識(shí)別,畢竟它不是標(biāo)準(zhǔn)的類型。
所以還需要在上面加一行代碼,專門告訴編譯器,T 是一種類型。
調(diào)用函數(shù)的時(shí)候,可以顯示指定類型,也可以讓編譯器自己去分析,這就是 C++ 中的函數(shù)模板。
單從功能上來(lái)說(shuō),確實(shí)給用戶提供了極大的方便。
再回到C語(yǔ)言上,C語(yǔ)言并沒(méi)有函數(shù)模板的概念,唯一能接近函數(shù)模板的方式,可能就是使用 _Generic 關(guān)鍵字。
#includeint 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ù)類型去匹配相應(yīng)的函數(shù),如果不看這些代碼,從使用的角度,確實(shí)有點(diǎn)函數(shù)模板的意思。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7622瀏覽量
139066 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4359瀏覽量
63469 -
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74338
原文標(biāo)題:C語(yǔ)言實(shí)現(xiàn)函數(shù)模板
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何用C語(yǔ)言實(shí)現(xiàn)面向?qū)ο缶幊?/a>
C語(yǔ)言實(shí)現(xiàn)的泛型函數(shù)swap()
用C語(yǔ)言實(shí)現(xiàn)DES算法
轉(zhuǎn)載一篇MSP430中斷c語(yǔ)言函數(shù)模板
用C語(yǔ)言實(shí)現(xiàn)數(shù)字濾波
C語(yǔ)言實(shí)用教程之函數(shù)的詳細(xì)資料說(shuō)明

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

評(píng)論