簡體   English   中英

了解C中的函數的typedef

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

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