Re: [問題] 關於回傳值 與 改變參數 的問題

看板C_and_CPP作者 (狗狗)時間10年前 (2013/09/20 14:15), 編輯推噓2(208)
留言10則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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)

09/20 14:26, , 1F
核心問題是你知道型別後要做哪些操作 ,因為沒多載跟模板可用
09/20 14:26, 1F

09/20 14:28, , 2F
對 C++ 不熟,請問一下若是用 C++ 要怎麼實作呢?
09/20 14:28, 2F

09/20 14:45, , 3F
還有很多設計議題, 只是個參考: http://codepad.org/PDTbyeCK
09/20 14:45, 3F

09/20 19:16, , 4F
原po原意是用C,若用純C的話我想要用enum.struct.union了.
09/20 19:16, 4F

09/20 19:17, , 5F
不過並不會比較方便。
09/20 19:17, 5F

09/20 20:55, , 6F
純 C 的話, 呼叫函式者有比較多的責任, 是我的話會這麼寫:
09/20 20:55, 6F

09/20 20:55, , 7F

09/21 17:54, , 8F
如果要靠 C++ 才能解決 那我會願意試試看 因為有Obj-C++
09/21 17:54, 8F

09/21 18:45, , 9F
現在是想知道 C block/callback 能否使用 template
09/21 18:45, 9F

09/21 23:37, , 10F
學 C++ 吧, C 就算可達成這目的,大概也被納為奇淫怪技了.
09/21 23:37, 10F
文章代碼(AID): #1IE-VqrW (C_and_CPP)
文章代碼(AID): #1IE-VqrW (C_and_CPP)