猿问

我如何理解复杂的函数声明?

我如何理解以下复杂的声明?


char (*(*f())[])();


char (*(*X[3])())[5];


void (*f)(int,void (*)()); 


char far *far *ptr;


typedef void (*pfun)(int,float);


int **(*f)(int**,int**(*)(int **,int **));


白板的微信
浏览 407回答 3
3回答

慕尼黑的夜晚无繁华

正如其他人所指出的那样,cdecl是这项工作的正确工具。如果您想在没有cdecl帮助的情况下理解这种声明,请尝试从内到外和从右到左阅读从列表中取一个随机示例从 X开始,这是声明/定义的标识符(以及最里面的标识符):char (*(*X[3])())[5];char (*(*X[3])())[5];         ^X是X[3] ^^^X是 3的数组(*X[3]) ^                /* the parenthesis group the sub-expression */X是一个3 指针的数组(*X[3])()       ^^X是一个3个指针的数组,用于 接受未指定(但固定)数量的参数(*(*X[3])()) ^                   /* more grouping parenthesis */X是一个由3个指针组成的数组,用于接受未指定(但固定)数量的参数 并返回指针(*(*X[3])())[5]            ^^^X是一个3个指针的数组,用于接受未指定(但固定)数量的参数并返回指向 5的数组的指针char (*(*X[3])())[5];^^^^                ^X是一个3个指针的数组,用于接受未指定(但固定)数量的参数并返回指向5个 char 数组的指针。

皈依舞

听起来像是cdecl工具的工作:cdecl> explain char (*(*f())[])();declare f as function returning pointer to array of pointer to function returning char我四处寻找该工具的官方主页,但找不到一个看似真实的主页。在Linux中,您通常可以期望您选择的分发包含该工具,因此我只是安装它以生成上述示例。
随时随地看视频慕课网APP
我要回答