繁体   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