簡體   English   中英

如何理解“typedef int(xxx)(int yyy);”?

[英]How to understand “typedef int (xxx)(int yyy);”?

typedef int (xxx)(int yyy); 似乎定義了一個名為xxx的函數指針,它指向一個帶有整數參數yyy的函數。

但我無法理解語法......任何人都可以給出一個很好的解釋嗎?


我找到了typedef int xxx(int yyy); 仍然有效。 他們之間有什么區別?

這定義了一個函數類型,而不是函數指針類型。

具有typedef的模式是它修改任何聲明,使得它不是聲明對象,而是聲明對象將具有的類型的別名。

這完全有效:

typedef int (xxx)(int yyy); // Note, yyy is just an unused identifier.
 // The parens around xxx are also optional and unused.

xxx func; // Declare a function

int func( int arg ) { // Define the function
    return arg;
}

具體而言,C和C ++語言不允許使用typedef名稱作為函數定義中的整個類型。

是的, typedef int (xxx)(int yyy); typedef int xxx(int yyy); 它定義了一個函數類型。 您可以在第156頁C 11標准草案N1570中找到示例。 從該頁面引用,

All three of the following declarations of the signal function specify exactly the same type, the first without making use of any typedef names.

    typedef void fv(int), (*pfv)(int);
    void (*signal(int, void (*)(int)))(int);
    fv *signal(int, fv *);
    pfv signal(int, pfv);

如果你有一些聲明符x在聲明T x然后T x(t1 p1, t2 p2)是指使用參數P1,P2的功能,作為說明符的X被具有前返回相同的類型

聲明符周圍的括號表示首先在括號內應用修飾符

在您的情況下,括號內沒有修飾符。 這意味着它們沒有必要。

函數原型意味着某處有一個具有此簽名的函數,其名稱為Blah

具有函數原型的Typedef意味着讓我們給函數簽名起一個名字 這並不意味着具有此簽名的任何函數都存在。 此名稱可用作類型。 例如:

typedef int xxx(int yyy);

xxx *func_ptr;       // Declaration of a variable that is a pointer to a function.
xxx *func2(int p1);  // Function that returns a pointer to a function.

暫無
暫無

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

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