【发布时间】: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;
{
}
...
即msg和pkt的定义在函数的名称/参数和定义之间。 message 和 packet 参数都是结构体;它们各自的成员声明高于它们的第一次使用,靠近 .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 的源代码也充满了这些定义。