函数定义远古知识
挖到一个真正的”远古知识”:K&R 风格的函数定义。这是 C 语言还没标准化的年代(K&R 那本《The C Programming Language》第一版)的写法,现在的编译器为了兼容老代码依然支持。
现代写法 vs 远古写法
1 | // 现代写法(ANSI C / C89 之后) |
特征很明显:参数列表里只写参数名,参数类型声明放在函数体大括号之前。类型声明还可以乱序(先写 real 再写 a),因为它们只是”声明区”,和参数名按位置对应。
为什么被淘汰了
K&R 风格最大的问题是:不带原型。调用方在没有任何声明的情况下调用它,编译器不会检查参数个数和类型,传错了照样编译通过,运行时才出玄学问题。ANSI C 标准化之后引入了函数原型(prototype),编译器从此能在编译期帮你查参数,这种写法就进了博物馆。
现在还认识它的价值:读老项目、老书(K&R 第一版)、还有 Linux 内核早期代码的时候不会懵。GCC 用 -Wold-style-definition 可以检查出这种写法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 寰宇体的世界!
评论
GiscusTwikoo
