筆試遇到這樣乙個題,偶傻傻地用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中呼叫兩個整型...