簡體   English   中英

如何從typename中刪除頂級指針?

[英]How to remove top-level pointer from typename?

例如,如果我有:

typedef int (*pFuncType)(int a, char b);

我想要輕松聲明'pFuncType'指向的類型的函數。 像這樣的東西:

(*pFuncType) funcDeclr;

這甚至可能嗎?

這甚至可能嗎?

這是不可能的。 聲明

typedef int * intptr;  

意味着intptr是新類型。 intptr類型的新變量可以定義為

intptr p;    // Same as int * p;  

使用intptr無法聲明int類型的變量。

(*inptr) i; 

相當於

(*(int *)) i;

這是一個錯誤的語法。
pFuncType

另請注意,聲明規則是declation說明符必須在聲明 之前。 *來自聲明符 ,因此它不能出現在任何聲明說明符之前。 看一下語法 1

declaration
    declaration-specifiers ;
    declaration-specifiers init-declarator-list ;   

declaration-specifiers
    storage-class-specifier
    type-specifier
    type-qualifier
    storage-class-specifier declaration-specifiers
    type-specifier          declaration-specifiers
    type-qualifier          declaration-specifiers

init-declarator-list
    init-declarator
    init-declarator-list , init-declarator

init-declarator
    declarator
    declarator = initializer   

......
......

declarator
    direct-declarator
    pointer direct-declarator

direct-declarator
    identifier
    ( declarator )
    direct-declarator [ ]
    direct-declarator [ constant-expression ]
    direct-declarator ( )
    direct-declarator ( parameter-type-list )
    direct-declarator ( identifier-list )

pointer
     *
     * pointer
     * type-qualifier-list
     * type-qualifier-list pointer  

1語法可以在C11標准的§6.7和§6.7.6中找到

不可以。但是,您可以聲明非指針類型:

typedef int (funcType)(int a, char b);

funcType f;

int f(int a, char b) {
    return a;
}

暫無
暫無

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

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