看板 C_and_CPP 關於我們 聯絡資訊
想問幾個關於 C 語言的問題 問題一:如果一個 function 的回傳值的型別不確定 有辦法宣告嗎? 例如:有兩個 function 定義如下 /** 計算一個物件的分數 */ int calculateScore(void *obj){ return scoreForAnswers(obj->answer1, obj->answer2); //有很多answers只列兩個 }; /** 針對答案進行分數計算 */ int scoreForAnswers(int answer, ...){ int score; // 把 answer 計算加總然後 assign 給 score return score; }; 今天我想插入一個 function call 在兩個 functions 之間: /** 這個 function 可以接受任何 type 的 value 並把該 value 繼續回傳*/ unknown_return_type sideEffect(unknown_return_type value){ printf("This is side effect function"); return value; } /** 計算一個物件的分數,但多呼叫一個 sideEffect() */ int calculateScore(void *obj){ return sideEffect(scoreForAnswers(obj->answer1, obj->answer2)); }; ==> 因此執行 calculateScore() 時,會順便執行 sideEffect function // ----- 請問 有辦法讓一個 function 吃一個未知 type 的變數 並將它回傳嗎? // ----- 問題二:有辦法把一個變數傳入一個沒有回傳值的 function 後,還能改變該變數嗎? (解答): int integer_not_greater_than_100(int *input){ if (*input > 100){ *input = 100; return 1; } return 0; } void printIntValue(int value){ int hasChanged = integer_not_greater_than_100(&value); printf("value: %d; hasChanged: %d", value, hasChanged); } int main (int argc, char * argv[] ) { int value = 300; printIntValue(value); // 會印出100 return 0; }; ==> 希望當 printIntValue() 輸入的值大於 100 時,只會列印 100 這兩個問題我一直想要去實踐,但是一直找不到方法 希望高手能幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.245.65.129
Feis:純C嗎? 09/19 15:28
Ebergies:1. template 2. int &value 09/19 15:29
Feis:1. 要改介面考慮 void * 2. 看不懂需求,為何要求 void ? 09/19 15:30
leondemon:使用 C (或Obj-C) ;E大的回答我不太懂 >"< 09/19 15:36
loveme00835:不用巢狀呼叫吧… 用個 callback 接受 void* 即可 09/19 15:37
Ebergies:C or Obj-C 請忽視我的發言... 09/19 15:38
loveme00835:第二個問題:印的責任應該在 printIntValue 裡,最前 09/19 15:41
loveme00835:面加上 if 判斷即可。不要寫一行程式 09/19 15:42
loveme00835:加在後面不用判斷,直接印出即可 09/19 15:44
leondemon:第二個問題解決了,謝謝大家 ^^ 不過第一個還在研究中 09/19 16:13
※ 編輯: leondemon 來自: 60.245.65.129 (09/19 16:26)
leondemon:不太懂 loveme 大大對於第一個問題的意思 Orz 09/19 16:30
EdisonX:問題一你可以找一下 stdlib.h 裡面 qsort 的實作。 09/19 19:34
EdisonX:loveme~ 講的應就是那方式 09/19 19:35
leondemon:謝謝提示 我會去找找看^^ 09/19 22:33