c/c++语言开发共享C11匿名结构通过typedef?

C11标准中添加了匿名结构,所以

typedef struct { struct {int a, b}; int c; } abc_struct; 

是有效和标准的。 使用typedef代替完整的struct声明是否也在标准范围内? 例如:

 typedef struct { int a, b; } ab_struct; typedef struct { ab_struct; int c; } abc_struct; 

GCC文档说这是Plan 9扩展,但它在我尝试过的少数编译器中工作(包括GCC ……)。 通过我对标准本身的阅读,我认为没关系,但这是一种容易搞砸的近距离阅读。

    这显然是由gcc团队的Joseph S. Myers向C委员会提出的一个问题。 答案是否定的,它在C11中无效。

    看到答案:

    而迈尔斯的评论:

    根据N1549,本周的伦敦WG14会议同意不允许使用typedef来声明匿名结构和联合字段。

    来源https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01151.html

    在SC22WG15.12205中提出了这个问题,参见5.28 SC22WG14.12205,匿名结构(N1425) , url是https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1490.pdf

    实际上你的第二个片段充满了危险,如果没有在gcc中明确指定-fplan9-extensions ,则不等同于第一个-fplan9-extensions

    特别是ab_struct; 第6行的声明没有(根据gcc警告)。 只需在foo.c中粘贴第二个片段就会生成:

     foo.c:6: warning: declaration does not declare anything 

    特别是如果你要尝试:

     typedef struct { int a, b; } ab_struct; typedef struct { ab_struct; int c; } abc_struct; int main() { abc_struct abc; abc.a = 5; return 0; } 

    你会在第13行获得语法错误abc.a = 5; 没有-fplan9-extensio

    而使用顶部片段,您的匿名结构将按照您的想法运行。 即:

     typedef struct { struct { int a, b; }; int c; } abc_struct; int main() { abc_struct abc; abc.a = 5; return 0; } 

    好吧,我担心我还没有费心去完成标准,但这是最终草案的内容:

    我只能解释为只有struct {};union {}; 可以是一个匿名结构/联合。

    需要了解更多c/c++开发分享C11匿名结构通过typedef?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享C11匿名结构通过typedef?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979912.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐