摘自 Robert Martin 所著的 Clean Code 一书:
在编程的早期,我们组成了我们的例程和子例程系统。然后,在 Fortran 和 PL/1 时代,我们组成了我们的程序、子程序和函数系统。如今,只有该功能从那些早期阶段幸存下来。
在我看来,这段摘录告诉我们例行公事是一件坏事,正在走出编程时代。
我做了一些搜索,发现Fortran中子程序和函数之间的区别是:
- 子程序对输入变量进行一些操作,调用子程序的结果是修改了输入变量。
- 函数将一个或多个参数作为输入并返回单个输出值。
虽然我没有写 Fortran 只写 C,但 C 支持的结构与 inint foo(int x)
和void foo(int* x)
.
引起我注意的是我从未听说过void foo(int* x)
C 中的一个糟糕的约定,所以我想弄清楚 Robert Martin 的这段摘录是什么意思。
还有一个问题。从 OOP 的角度来看,如果我想在 C 中模拟 OOP,例程是不是函数的好选择?