<分区>
在过去的 5 年里,我一直在专业地编写 Java。最近,我不得不深入研究 JNI 以调用一些 Windows 特定的函数。
这段经历凸显了我对 C(或 C++)语言的糟糕掌握。我对 C 的唯一介绍是我 11 年前在高中读到的一本简短的“傻瓜”书。
我知道这两种语言在那个时间范围内都取得了进步,尤其是 C++ 和标准库。
我学 C 还是 C++ 合适?哪些书最好?
大家对 Windows 编程也有什么建议吗?我可以很好地阅读 MSDN 以找出某些 API 调用,但我觉得我在“大局”方面遗漏了一些东西。
谢谢
好问题。从表面上看,推荐 C++ 是显而易见的,因为“它像 Java 一样面向对象”。唯一的问题是,这不是真的。C++ 允许 OOP,是的,但这只是 C++ 支持的几种范例之一。将 C++ 视为 OOP 语言(尤其是将其视为 Java)只会导致挫败感。
问题是 Java 和 C++ 实际上并没有太多共同之处。 Java 程序员通常认为 Java 是受 C++ 启发的,但只有当 C++ 指的是 C++ 的最早版本时,这才是正确的,它可能更恰本地称为“C with classes”。
从那时起,C++ 以自己的做事方式完全转变为自己的语言。从那时起,它的变化可能比 Java 大得多。那时的 Java 程序员仍然能够理解今天的 Java 代码。 C++ 不是这样。所以我认为 C 实际上比“现代 C++”更接近 Java。如果你采用 Java 并剥离 GC 和类的概念以及一些其他抽象,你将得到 C。要实现 C++,您还必须向我们假设的精简版 Java添加类似数量的功能。
此外,C++ 是一种非常复杂的语言,学好它需要很长时间。如果你学得不好,你就会一遍又一遍地搬起石头砸自己的脚。
最后,这取决于您的目标。
C++ 是一种比 C 更现代的语言,一旦你学习了它,它就会非常有表现力和强大,令人惊讶的是,它甚至可以非常优雅和简洁。但是学习曲线很糟糕。因此,从长远来看,对于 native 编程,我建议使用 C++ 而不是 C。
但是如果您的目标主要是与 Win32 API(或与此相关的其他 native API)交互,则不需要 C++。 Win32 和大多数其他 API 是用 C 而不是 C++ 编写的,并且在任何情况下您很可能不需要非常复杂的代码来连接它和 Java。
关于学习Win32,你说的对,MSDN上有你需要的所有细节。如果你想要大图,Petzold是关于这个主题的书。