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