學習日記 用巨集來實現模板

2021-04-13 14:24:47 字數 1684 閱讀 9888

筆試遇到這樣乙個題,偶傻傻地用union來實現(題上只要求double和char),回來一搜,才發現偶是完全錯了,難怪會被鄙視了,啊啊啊,第一次筆試被鄙視啊,記住了,用巨集來實現模板,轉乙個堆疊的例子:

#ifndef stack_h

#define stack_h

#ifndef my_bool

#define my_bool

#define true 1

#define false 0

typedef int bool;

#endif

/*棧型別棧結點結構*/

#define define_stack_node(type,name) /

typedef struct name##stack_nodename##stack_node;

/*泛型別棧定義*/

#define define_stack(type,name) /

define_stack_node(type,name)/

struct name##stackname##stack

#define init_stack(name)/

dowhile(0)

/*********** 不破壞棧頂元素取值*************************/

#define get_stack(name,elem) do/

}while(0)

/************** 壓入元素elem **************************/

#define push_stack(name,elem) do/

else/

}while(0)

/********** 棧頂元素賦值給elem,並彈出 ***********/

#define pop_stack(name,elem) do/

else/

free(temp);/

}/}while(0)

/************** 清空棧 ************************/

#define clear_stack(name) do/

name##stack.base=name##stack.top=(void *)0;/

}while(0)

/****************棧空???? ************************/

#define empty_stack(name) (!name##stack.size)?(true):(false)

/*****************長度 ************************/

#define length_stack(name) (1?name##stack.size:0)

#endif

再接著一段測試的**:

#include

#include "my_stack.h"

define_stack(int,a);

int main(void)

printf("%d ",length_stack(a));

for(a=1;a<=100;a++)

while( ! empty_stack(a))

}clear_stack(a);

clear_stack(b);

return 0;

用模板來進行型別檢查。

在講述之前,請看c 的型別資訊系統 typeid,sizeof,函式呼叫,模板特化 這幾個dd,或者隱藏地轉換c 的型別,或者直接得到型別資訊 前兩個就不說了,沒什麼可說的。現在說函式呼叫,請看如下 void foo int a 這樣的 也許天天在寫,但是,您有沒有注意到,我們在函式呼叫的時候 fo...

用模板來進行型別檢查。

在講述之前,請看c 的型別資訊系統 typeid,sizeof,函式呼叫,模板特化 這幾個dd,或者隱藏地轉換c 的型別,或者直接得到型別資訊 前兩個就不說了,沒什麼可說的。現在說函式呼叫,請看如下 void foo int a 這樣的 也許天天在寫,但是,您有沒有注意到,我們在函式呼叫的時候 fo...

C 學習日記 12 模板

函式和類有助於使程式更易於編寫,更安全,更易於維護。然而,雖然函式和類確實具有所有這些優點,但在某些情況下,它們也可能受到c 規則的限制,必須為所有引數指定型別。例如,你可能想寫乙個函式來計算兩個數字的總和,就像這樣 int sum int a,int b 我們現在可以在我們的main中呼叫兩個整型...