C語言實現模版

2021-10-02 15:17:29 字數 1269 閱讀 9761

c語言有兩把雙刃劍,一把是「指標」,另一把是「巨集」。這回咱就用「巨集」來實現c++中才有的模版。這裡的模版實現乙個很簡單的加法函式,同乙個函式**可以處理不同型別的加法運算。

c++的實現

template t add(t a, t b)

#include int main(int argc, const char *ar**)

c語言的實現

// add.h

// 定義演算法函式

_type _func(_type a, _type b)

#undef _type

#undef _func

// add.c

// 定義add函式,實際上是巨集

#define add(t, a, b) (add_ ## t ((a), (b)))

// 建立型別為int的例項函式

#define _type int

#define _func add_int

#include "add.h"

// 建立型別為char的例項函式

#define _type char

#define _func add_char

#include "add.h"

// 建立型別為float的例項函式

#define _type float

#define _func add_float

#include "add.h"

#include int main(int argc, const char *ar**)

預處理結果

使用gcc -e add.c輸出預處理結果,實際上定義了三個函式,main函式中分別呼叫了不同的函式。(下面的預處理結果刪除了stdio.h標頭檔案的部分)

# 1 "add.h" 1

int add_int(int a, int b)

# 7 "add.c" 2

# 1 "add.h" 1

char add_char(char a, char b)

# 11 "add.c" 2

# 1 "add.h" 1

float add_float(float a, float b)

# 15 "add.c" 2

int main(int argc, const char *ar**)

C語言巨集實現模版函式

h檔案可以宣告巨集定義模版函式 在其它檔案中只要包含了該.h檔案,就可以使用這些函式 define convert declare suffix,t,filename extern void suffix filename const scalar s,t buf,int cn,int unroll...

C語言實現memcpy

memcpy和memmove都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊 的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。程式設計師面試寶典中有例題 對應的原型如下 v...

C語言實現多型

c 中的多型是指 通過基類物件的指標或者基類物件的引用呼叫虛函式 表現更多派生類的特性,但根據c 多型的實現,我們發現這種方法存在一定的空間和效率的折損。不可否認,多型輕鬆解決了很多任務程中遇到的問題,這與 pure c 的解決方法比起來,更為優雅。在考慮移植性上,c 的光芒要蓋過 c 但 c 的多...