用C語言能不能實現(xiàn)一個通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點數(shù)的相加?
放在C語言里面,確實比較困難。
我們先來看看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++有個重要的概念叫做模板,所謂模板,就是通用的意思。
不管是整數(shù)的相加,還是浮點數(shù)的相加,代碼都是一樣的,唯一的區(qū)別就是類型,參數(shù)的類型以及返回值的類型。
那就干脆用一種通用的類型來代替,這個類型暫且就叫 T。
這樣的代碼如果直接拿來編譯,編譯器肯定會提示 T 這種類型不能識別,畢竟它不是標準的類型。
所以還需要在上面加一行代碼,專門告訴編譯器,T 是一種類型。
調(diào)用函數(shù)的時候,可以顯示指定類型,也可以讓編譯器自己去分析,這就是 C++ 中的函數(shù)模板。
單從功能上來說,確實給用戶提供了極大的方便。
再回到C語言上,C語言并沒有函數(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ù)類型去匹配相應的函數(shù),如果不看這些代碼,從使用的角度,確實有點函數(shù)模板的意思。
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136683 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62569 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73618
原文標題:C語言實現(xiàn)函數(shù)模板
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論