C和C++之间的一个重大区别是结构中的成员函数.C不允许函数作为结构中的成员.我知道一个解决方法是使用函数指针作为结构成员,但这只是函数模拟,它打破了范围规则.
如果C允许实际函数作为结构的成员,那将是一个很好的功能.但我不知道为什么C不这样做.有什么特别的原因吗?
你正在向后看.
C不是从C++开始然后删除功能而设计的.C是从较旧的语言开始设计的,包括B,FORTRAN和当时的汇编语言.
从那里开始,C的设计者添加了代表经常出现在当代代码中的模式的功能,例如数据类型(而不是使用位),用户定义的复合类型(结构),干净分离的函数(而不是传递参数(而不是通过寄存器和堆栈手动传递它们,相应地检索它们,然后手动清理),等等.
从那里开始,现在OOP语言的设计者添加了代表经常出现在当代代码中的模式的功能,例如与他们在其上运行的数据(方法),具有继承的数据类型携带的功能(而不仅仅是组合),可见性控制和封装(而不是隐藏在不透明指针之后的东西),调用点处的多态(而不是显式地检查表示数据类型的内部标志),等等.
现在应该很清楚:C++的设计者是如何引入这么多功能的呢?因为C已经存在,他们可以从那里开始.为什么C的设计师不介绍所有这些功能?好吧,因为那些人太忙于设计C本身.
关键是,每一个成功的语言通常都比以前的语言有所改进.与以前相比,C提供的所有功能都使编程更安全,更容易.当然,它没有我们今天拥有的所有功能,但即使回想起来,也不应该 - 语言设计师需要在实践中看到程序员从那里需要什么样的东西.