c - 结构定义的奇怪位置?

标签 c syntax

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

我需要做一些作业(用 C 语言),在这个作业中我们给出了一些方法 stub 。我不太擅长 C,但是当我查看 stub 时,这引起了我的注意:

...
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 语法还是只是一个拼写错误?我环顾四周,但找不到类似的东西,也没有在任何其他语言中见过类似的东西,来分割函数的代码。无论我做什么,编译器都会尖叫无效的函数原型(prototype),所以似乎有些不对劲......

最佳答案

这是非常的代码,在 20 世纪 80 年代标准化之前。

A_output(message)
  struct msg message;
{

}

是函数定义,message是参数。这就是“过去”对争论的定义。请注意缺少的返回类型,这意味着该函数返回一个 int

上面的定义等效于以下内容:

int A_output(struct msg message)
{

}

关于c - 结构定义的奇怪位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435426/

相关文章:

c - 如何定义指向端口地址的指针

javascript - 为什么有时匿名函数前会有一个分号?

java - Java 中的 XML 语法验证

python - 有什么不能出现在括号内的吗?

c++ - "struct type variablename"作为声明有效吗?

c - 什么是 "extended integer types"?

c - C 中文件的二进制/整数表示

c - 二叉树遇到问题

在 C 内部控制部分声明变量时出现编译时错误

c - 维度矩阵中的访问冲突读取位置