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