[英]understanding typedefs for functions in C
我遇到了以下函數聲明,但無法理解其工作原理:該函數在文件中的聲明如下:
struct newtype {
/* some definition */
};
typedef void function1 (int* a, newtype* p);
然后在另一個C代碼中,以上聲明用於聲明另一個function2,如下所示:
function1 function2;
void function2(int* a, newtype* p)
{
/* function definition */
}
然后使用function2,如下所示:
int function3 (int, char, function1* );
/* definition */
function3(int a, char c, function2 )
{
/* function definition */
}
我無法理解以下語句:function1 function2; typedef void function1(參數)是什么意思,因為function1未聲明為指針。 誰能解釋這里發生了什么?
函數1聲明為函數的類型,該函數不返回任何內容並以指向int的指針和指向newtype的指針作為參數。
這種方法對於確保獲得符合特定格式的函數很有用,尤其是在使用回調函數/函數指針時。
typedef void function1 (int* a, newtype* p);
將名稱function1定義為void ()(int *, newtype *)
類型void ()(int *, newtype *)
即函數void ()(int *, newtype *)
的別名。
因此function1 function2;
與此原型相同:
void function2 (int* a, newtype* p);
名稱function1
也可以用來聲明一個指針,這將導致一個熟悉的“函數指針”。 那就是當int function3 (int, char, function1* );
聲明int function3 (int, char, function1* );
時所做的事情int function3 (int, char, function1* );
-它的最后一個參數是指向簽名為void ()(int *, newtype *)
的函數的指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.