微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C拼图 – 玩的类型

请检查以下程序.
#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’仅代表返回类型
函数’fn’,它是如何可见的
到其他功能(主)?

解决方法

如果我们重新格式化代码,事情可能会更清楚一些:
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 举报,一经查实,本站将立刻删除。

相关推荐