[英]C: Passing a function pointer in a function it is passed to
我正在嘗試編寫一個帶有函數指針的映射函數,並將其傳遞給另一個函數,但是gcc對我大吼大叫。
這是我想要做的事情的想法。
void map(T thing, void apply(int a, int b, void *cl), void *cl);
void function(T thing, void apply(int a, int b, void *cl), void * cl)
{
for(int i = 0; i < 10; i++)
{
map(thing, apply, cl);
}
}
gcc的抱怨:
警告:從不兼容的指針類型傳遞'map'的參數2
有任何想法嗎?
為了幫助解決這個問題,我們需要查看map函數的聲明/簽名。 幾乎可以肯定,功能簽名略有不同。 解決這個問題的最簡單方法是輸入一個函數指針類型並在兩個函數中使用它。
typedef void (*apply)(int,int,void*);
你不能傳遞函數。 您需要將指針傳遞給函數。
void map(T thing, void (*apply)(int a, int b, void *cl), void *cl);
void function(T thing, void (*apply)(int a, int b, void *cl), void * cl)
{
/* ... */
map(thing, apply, cl);
/* .... */
}
它只是抱怨map
的第二個參數所期望的函數指針類型與apply
不同。 如果你要么改變那種類型,要么(如果安全)施放,那么它會沒事的。
它適用於gcc 4.3.3和-Wall
。
雖然我認為所有存在的C版本都重寫了函數“value”參數作為指針,但您可以使用更傳統的聲明:
void function(T thing, void (*f)(int a, int b, void *cl), void * cl)
但是,就像我說的,你的例子對我來說沒問題,除了typedef int T
和map(1, ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.