为何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
相关产品推荐
相关产品推荐

