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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...