You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C语言midifile MIDI解析库代码风格如此怪异?

关于midifile库老式C函数定义风格的成因解释

嘿,你观察得真细致!你看到的这种函数写法,是K&R C的典型风格——也就是C语言标准化之前,由Kernighan和Ritchie在《C程序设计语言》第一版里确立的语法规范,算是C语言的“初代写法”了。

这种风格的核心特点和成因:

  • 默认返回类型为int:在K&R C的规则里,如果函数没有显式声明返回类型,编译器会默认它的返回值是int类型,所以你看不到返回类型声明是正常操作;只有当函数不需要返回值时,才需要在函数名前显式写void。
  • 参数分离声明:函数名后面先列出所有参数的名字,再单独一行声明每个参数的类型。这是早期C语言语法设计的习惯,当时的编译器还不支持现代C里“参数名+类型”的紧凑写法。
  • 兼容性与历史遗留:midifile作为midifile++的前身,属于比较早期的C项目。这类老库保留K&R风格,要么是为了兼容那些只支持老式语法的古董编译器,要么是开发者本身习惯了这种写法——毕竟在C89(第一个ANSI C标准)出台前,所有C代码都是这么写的。

结合你提到的代码做个对比:

你看到的怪异写法:

mypressure(chan,pitch,pressure)
int chan,pitch,pressure;
{
    // 函数逻辑
}

完全等价于现代C(C99及以后)的写法:

int mypressure(int chan, int pitch, int pressure)
{
    // 函数逻辑
}

需要注意的是,这种K&R风格现在已经被C标准废弃了(C99开始不推荐,C11正式移除了语法支持),现代编译器遇到这类代码通常会抛出警告,但为了兼容旧项目,大部分编译器还是能正常编译。

内容的提问来源于stack exchange,提问作者user1610950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:30:18