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