理解一些疯狂的C/C++声明

Understanding some crazy C/C++ declarations

本文关键字:C++ 声明 疯狂      更新时间:2023-10-16

可能重复:
如何理解复杂的函数声明?

考虑:

char (*(*x())[5])()

我该如何剖析这个表达式?

我认为它是一个返回大小为5的数组的函数,其成员是指向不接收输入并返回char的函数的指针。

我说得对吗?

搜索"左右规则"

在您的情况下,它应该是:

         x          : x is a
         x()        : function
        *x()        : returning pointer to
       (*x())[5]    : a 5-element array of 
      *(*x())[5]    : pointer to
     (*(*x())[5])() : function
char (*(*x())[5])() : returning char

我在Stack上看到了很多奇怪的声明;这些天太多了。

当我懒惰的时候,我会使用cdecl.org:

"将x声明为返回指针的函数,该指针指向返回字符的函数的指针的数组5"

如果不是,则存在顺时针螺旋规则<-它是AWESOME