例如,如果我有:
typedef int (*pFuncType)(int a, char b);
我希望能够轻松地声明一种类型的功能,即' pFuncType'是指针。像这样:
(*pFuncType) funcDeclr;
这甚至可能吗?
答案 0 :(得分:3)
这甚至可能吗?
这是不可能的。声明
typedef int * intptr;
表示intptr
属于新类型。类型intptr
的新变量可以定义为
intptr p; // Same as int * p;
使用intptr
无法声明int
类型的变量。做
(*inptr) i;
相当于
(*(int *)) i;
这是一种错误的语法
同样适用于pFuncType
。
另请注意,声明规则是 declation说明符必须位于声明符之前。 *
来自声明符,因此它不能出现在任何声明说明符之前。查看grammar 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
一节中找到答案 1 :(得分:0)
没有。但是,您可以声明非指针类型:
typedef int (funcType)(int a, char b);
funcType f;
int f(int a, char b) {
return a;
}