作者devon5 (Dev一)
看板C_and_CPP
標題[問題] C語言的函數是否能回傳不同型態
時間Thu Mar 19 19:27:04 2009
大家好,想請問一個有關於C的問題。
我想要利用C來模擬PHP的程式,但最大的問題在於變數的型態
目前是打算利用union和struct來記錄變數的資訊
union代表一些基本的變數型態,
而struct中的tag_type則代表目前union中的變數種類
我原先是打算利用判斷tag_type中的值來讀取該變數相對應的欄位
例如:
if( tag_type==0)
return v.inum
else if( tag_type==1)
return v.fnum
...
但是似乎沒有辦法只單靠一個function來完成,
因為function一次只能有一種回傳型態。
不知道有辦法只靠一個function完成這種功能嗎?
還是要用C++才比較有可能?
謝謝大家
以下為程式碼部分:
union value{
int inum;
//整數
float fnum;
//浮點數
char * str
//字串
};
struct var{
int tag_type;
//union中的變數型態
union value v;
};
int main(void){
struct var a,b,c;
float d;
int i;
a.tag=0; //int
a.v.inum=10;
b.tag=1; //float
b.v.fnum=1.1;
c.tag=2; //char*
c.v.str="apple";
d=func(a)+func(b); //能寫出一個function自動抓出正確的數值嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.151.237
※ 編輯: devon5 來自: 218.166.151.237 (03/19 19:27)
1F:推 hylkevin:不行 用MACRO 03/19 19:57
2F:→ bleed1979:如果是C++的話 template可不可行呢? 03/19 20:20
3F:推 hylkevin:物件的type是執行期決定的 template是編譯期就決定了 03/19 22:24
4F:推 sunneo:你可以定義func(a)回傳一個 具有operator+的物件 03/19 22:45
5F:→ sunneo:當碰到func(b)該對tag做什麼動作就是你自己寫的了 03/19 22:46
6F:→ MOONRAKER:想說C way大概就是用void * 03/19 23:01
7F:→ devon5:謝謝大家的回應 03/20 12:32