【问题标题】:struct as return type of functionstruct 作为函数的返回类型
【发布时间】:2014-07-26 17:02:15
【问题描述】:

在阅读C traps and Pitfalls时,我遇到了以下代码sn-p:

struct logrec{
    int date;
    int time;
    int code;  
}            // semicolon is missing

main()
{
..
..
}

注意 } 后缺少分号,这使得 main() 返回结构。

而不是问main()返回结构的问题[因为main()返回非int是未定义的行为],所以我想问任何其他fun()的问题。例如

struct Abc{int a;} fun(){
    Abc a1;    //Error : Unknown type name 'Abc'
}

int main(){
.....
}

正如评论声明Abc a 中提到的,给出错误Unknown type Abc

所以我对此有两个问题:

  1. 结构 Abc 的范围是什么?
  2. 如果我不能在fun() 中声明任何 Abc 类型的变量,那么如何 我可以返回 struct Abc 吗?

【问题讨论】:

  • logrec 不在该 PDF 中?
  • 哦,实际上我有一个没有注意到版本的硬拷贝,对不起

标签: c


【解决方案1】:

这只是一个简单的语法错误。 Abcstruct Abc 的类型不同。

变化:

struct Abc{int a;} fun(){
    Abc a1;    //Error : Unknown type name 'Abc'
}

到:

struct Abc{int a;} fun(){
    struct Abc a1;
} //^^^^^^

【讨论】:

  • 这也可以工作 - typedef struct Abc{int a;}Abc;。不是吗?
  • 好的,现在我什至可以在 main() 中声明它..谢谢,抱歉这个愚蠢的问题
  • @A.s.Bhullar:我不知道你是否注意到了,但它在那个 PDF 中告诉你它已经是一个语法错误。 (见第 8 页,共 29 页)
  • @Noob:是的,给这两种类型取别名的 typedef 通常是更好的选择。
  • @staticx,不,没有提到,第 2.3 节注意那些分号!
猜你喜欢
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2016-07-24
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多