簡體   English   中英

如何在C中使用函數指針?

[英]How to use function pointer in C?

我正在編寫包含以下功能的pthread程序,並且我想在一個功能之間調用另一個功能。

void *fun1(void *arg1)
{
fun2(NULL);
}
void *fun2(void *arg)
{
fun1(NULL);
}

當我如上所述調用另一個函數時,出現如下所示的錯誤

錯誤:“ fun2”的類型沖突

注意:之前的“ fun2”隱式聲明在此處

我如何在fun1之間調用fun2

宣布 :

void *fun2(void *);

fun1前1

編譯器將默認返回類型假定為int因此您需要在使用前告訴它實際的原型

在編譯期間,您沒有給出fun2的原型,例如:

void * fun2(void *);

由於沒有前向聲明,因此編譯器隱式假定其將返回int (我的意思是,這就是我的編譯器的行為方式)因此它將具有沖突的類型。

最佳做法是:

void * fun1(void *);
void * fun2(void *);

void * fun1(void *arg1)
{
    fun2(NULL);
    //return missing
}
void * fun2(void *arg)
{
    fun1(NULL);
    //return missing
}
/* forward declaration */
void *fun2(void *arg);

void *fun1(void *arg1)
{
  fun2(NULL);
}
void *fun2(void *arg)
{
  fun1(NULL);
}

請注意,按照書面規定,您具有無限遞歸。 這兩個函數只會互相調用,直到程序耗盡堆棧並崩潰為止。

必須先聲明函數,然后再習慣在頭文件或.c文件頂部聲明函數。 你應該

void *fun2(void *args);

讓我們瘋狂地假設您已經使用了前向聲明。

fun1 (有用詞不當)調用fun2那么呼叫fun1的呼叫fun2循環往復-直到堆棧的祝福機器運行和放棄(耐心?)。

暫無
暫無

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

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