作者leondemon (狗狗)
看板C_and_CPP
標題Re: [問題] 關於回傳值 與 改變參數 的問題
時間Fri Sep 20 14:15:13 2013
※ 引述《leondemon (狗狗)》之銘言:
: 想問幾個關於 C 語言的問題
: 問題一:如果一個 function 的回傳值的型別不確定 有辦法宣告嗎?
我實作了一下 把問題列在下面的程式碼中...
// 這是我想在兩個 function 之間安插的 function
// 他會接受一個 unknown type 的值 並回傳一個 unknown type 的值
// 這個函式是有可能會依據傳入的值來修改回傳值
void* sideEffect(void *input){
printf("sideEffect\n");
//
Question 1: 有辦法知道傳進來的 *input 原本是什麼型別嗎?
//
例如:若 input 為數字,則將其值乘以2
return input;
}
// 這是實際上會計算 score 的 function 目前先以回傳 99 示意
int score99(){
return 99;
}
// 這是外面呼叫的 function
int score(){
// 原本的實作是單純回傳 score99() 的值
//
return score99();
// 現在是在回傳 score99() 之前,呼叫 sideEffect()
// sideEfffect 是有機會去改變傳入、傳出的值
//
Question: 能否把下面兩行程式碼濃縮成一行?
//
Question: 有辦法在return時不cast成 *(int *) 中的"int"嗎?
//
也就是希望能universal,若sideEffect傳入是float型別
//
回傳時就自動會cast成*(float*)
//
sideEffect 傳入傳出都不檢查(或指定)型別
int someValue = score99();
return *(int *) sideEffect(&someValue);
}
int main (int argc, char * argv[] ) {
printf("score: %d\n", score());
return 0;
};
(console)
==> sideEffect
==> score: 99
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.245.65.129
※ 編輯: leondemon 來自: 60.245.65.129 (09/20 14:22)
→ Feis:核心問題是你知道型別後要做哪些操作 ,因為沒多載跟模板可用 09/20 14:26
→ leondemon:對 C++ 不熟,請問一下若是用 C++ 要怎麼實作呢? 09/20 14:28
推 EdisonX:原po原意是用C,若用純C的話我想要用enum.struct.union了. 09/20 19:16
→ EdisonX:不過並不會比較方便。 09/20 19:17
→ Feis:純 C 的話, 呼叫函式者有比較多的責任, 是我的話會這麼寫: 09/20 20:55
→ leondemon:如果要靠 C++ 才能解決 那我會願意試試看 因為有Obj-C++ 09/21 17:54
→ leondemon:現在是想知道 C block/callback 能否使用 template 09/21 18:45
推 EdisonX:學 C++ 吧, C 就算可達成這目的,大概也被納為奇淫怪技了. 09/21 23:37