C拼图 – 玩的类型

前端之家收集整理的这篇文章主要介绍了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 */
}

猜你在找的C&C++相关文章