![](/img/trans.png)
[英]Using lambda for callback function as C function parameter
[英]Using a function as a parameter in C
我試圖使用函數作為另一個函數的參數。 我想根據我傳遞的函數得到不同的計算。 我嘗試通過編寫這個程序來實現這個:
http://pastebin.com/CJfFarVa
碼:
問題是我一遍又一遍地得到這個錯誤:
trapeze.c:14:8: error: conflicting types for ‘exp2’
double exp2(int number);
trapeze.c: In function ‘main’:
trapeze.c:28:35: error: expected expression before ‘int’
exp_2 = trapeze(0, 1, n, exp2(int x));
^
trapeze.c:29:35: error: expected expression before ‘int’
exp_1 = trapeze(0, 1, n, exp1(int x));
^
trapeze.c: At top level:
trapeze.c:58:8: error: conflicting types for ‘exp2’
double exp2(int number)
注意:我不想使用函數指針。
對不起,如果這是一個簡單的問題。
C不是函數式編程語言,這意味着函數不是第一類對象,因此,你不能將函數作為其他函數的參數傳遞,你必須使用指針函數。
將呼叫更改為trapeze
:
exp_2 = trapeze(0, 1, n, exp2);
exp_1 = trapeze(0, 1, n, exp1);
exp_1 = trapeze(0, 1, n, exp1(int x));
^^^^^^^^^^^---
這一行將執行exp1()
,然后將其返回值作為參數傳遞給trapeze
。 你不能在函數調用中聲明變量。 聲明參數類型是在函數定義中完成的,而不是在函數CALL中完成的。
exp_1 = trapeze(0, 1, n, exp1(x));
沒關系。
原型
double trapeze(int a, int b, double n, double (*f)(int x));
呼叫
exp_2 = trapeze(0, 1, n, exp2);//exp2 : used c99
exp_1 = trapeze(0, 1, n, exp1);
你必須打電話:
exp_1 = trapeze(0, 1, n, exp1);
這樣trapeze()
獲取指向exp1()
的指針,而不是在某個隨機參數上調用exp1
的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.