重复: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;
{
}
...
即,函数名称/参数和定义之间的 msg
和 pkt
的定义。 message
和packet
参数都是结构体;它们各自的成员声明位于其第一次使用之上,靠近 .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/