簡體   English   中英

C:在傳遞給它的函數中傳遞一個函數指針

[英]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 Tmap(1, ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM