请检查以下程序.
#include <stdio.h> struct st { int a ; } fn () { struct st obj ; obj.a = 10 ; return obj ; } int main() { struct st obj = fn() ; printf ("%d",obj.a) ; }
以下是问题
>程序的输出是什么?
>”’终止“struct st”的声明?
按ISO IEC 9899 – 1999
规格,声明应
以’;’结尾.
declaration-specifiers init-declarator-listopt ;
解决方法
如果我们重新格式化代码,事情可能会更清楚一些:
struct st { int a; } fn() { struct st obj; obj.a = 10; return obj; } int main() { struct st obj = fn(); printf("%d\n",obj.a); return 0; }
因此,fn()的返回类型是struct st {int a;}.在struct定义之后没有分号,因为struct类型是函数定义的一部分(通过翻译单元的语法跟踪 – >顶级声明 – > function-deFinition).结构类型可用于main(),因为它在其上放置了一个struct标签(st).如果你写的
struct { int a; } fn() {...}
那么该类型将不可用于main();您将不得不使用相同的定义创建一个新的结构体类型.
你得到的效果和你写的一样
struct st { int a; }; struct st fn() { /* same as before */ } int main() { /* same as before */ }
原文地址:https://www.jb51.cc/c/111051.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。