[英]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.