【问题标题】:Strange placement of struct definition?结构定义的奇怪位置?
【发布时间】:2023-03-05 22:11:02
【问题描述】:

重复Alternative (K&R) C syntax for function declaration versus prototypes

我有一些我需要做的作业(用 C 语言),在这个作业中,我们得到了一些方法存根。我的 C 语言不是很好,但是当我看到存根时,这引起了我的注意:

...
A_output(message)
  struct msg message;
{

}

 A_input(packet)
  struct pkt packet;
{

}
...

msgpkt的定义函数的名称/参数和定义之间。 messagepacket 参数都是结构体;它们各自的成员声明高于它们的第一次使用,靠近 .c 文件的开头:

struct msg {
  char data[20];
  };

struct pkt {
   int seqnum;
   int acknum;
   int checksum;
   char payload[20];
    };

这种初始化是我不熟悉的某种 C 语法还是只是一个错字?我环顾四周,但找不到类似的东西,我也从未见过任何其他语言的类似东西,以拆分这样的函数代码。无论我做什么,编译器都会对无效的函数原型大喊大叫,所以似乎有些不对劲……

【问题讨论】:

  • 哦,天哪,又回到了 70 年代。隐式 int 和 K&R 函数。
  • “编译器对无效的函数原型大喊大叫”——你确定你使用的是 C 编译器吗? (诚​​实的问题。C++ 编译器不会喜欢它。)
  • 是的,我一直在用 GCC 编译。
  • @hvd 甚至 gcc 的源代码也充满了这些定义。

标签: c syntax


【解决方案1】:

这是非常旧的代码,在 1980 年代标准化之前。

A_output(message)
  struct msg message;
{

}

是函数定义,message是参数。这就是在“过去”中定义论点的方式。注意缺少的返回类型,这意味着该函数返回一个int

上面的定义等价于:

int A_output(struct msg message)
{

}

【讨论】:

  • 你告诉我吧:P可怜的丹尼斯可能在他的坟墓里旋转。代表和检查,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多