我已经从事Java职业开发5年了。最近,我不得不深入研究JNI以调用一些Windows特定的函数。
这个经历凸显了我对C(或者也包括C ++)语言的薄弱掌握。我对C的唯一介绍是11年前在高中读过的一本简易书。
我知道这段时间内两种语言都有进步,尤其是C++和标准库。
学习C或C ++是否合适?哪些书最好?
大家还有什么关于Windows编程的推荐吗?我可以通过MSDN阅读足够了解某些API调用,但我感觉在“大局”方面可能会错过一些东西。
谢谢
我已经从事Java职业开发5年了。最近,我不得不深入研究JNI以调用一些Windows特定的函数。
这个经历凸显了我对C(或者也包括C ++)语言的薄弱掌握。我对C的唯一介绍是11年前在高中读过的一本简易书。
我知道这段时间内两种语言都有进步,尤其是C++和标准库。
学习C或C ++是否合适?哪些书最好?
大家还有什么关于Windows编程的推荐吗?我可以通过MSDN阅读足够了解某些API调用,但我感觉在“大局”方面可能会错过一些东西。
谢谢
好问题。表面上看来,推荐C++是很明显的选择,因为“它像Java一样是面向对象的”。唯一的问题是,这并不完全正确。C++确实允许OOP,但这只是C++支持的几种范例之一。把C++当作一个面向对象的语言(尤其是把它当作Java)将只会导致挫败感。
问题在于Java和C++实际上没有太多共同点。Java程序员通常认为Java受到了C++的启发,但这只有在你说C++指的是最早期的C++版本时才是真的,那可能更恰当地称为“带类的C”。 从那时起,C++已经完全变成了自己的语言,在处理事物方面也有自己的方式。自那时以来,C++的变化可能比Java还要大。一个Java程序员如果回到过去,仍然能够理解今天的Java代码。但对于C++而言,情况就不一样了。所以我认为,C实际上比“现代C ++”更接近Java。如果你拿走Java的垃圾回收、类概念和其他一些抽象,你就会得到C。要想到达C++,你必须将类似数量的特性添加到我们假想的简化Java中。
此外,C++是一种非常复杂的语言,学习它需要很长时间。如果你没有好好学习它,你会一遍又一遍地自己给自己惹麻烦。
最后,这取决于你的目标。 C++比C更现代化,一旦学会了,就非常富有表现力和强大,令人惊讶的是,它甚至可以非常优雅而简洁。但是,它的学习曲线很陡峭。因此,从长远来看,我会推荐C++而不是C进行本地编程。
但是,如果你的目标主要是与Win32 API(或其他本地API)交互,你将不需要C ++。 Win32和大多数其他API都是用C编写的,而且您可能不需要非常复杂的代码来在Java和API之间进行接口。
关于学习Win32,你说得对,你需要的所有细节都在MSDN上。如果你想了解整体框架,Petzold是该主题的权威书籍。我猜这取决于你的目标。
如果你想更接近机器,那么使用C。
如果你想补充在C之上的OO Java-like层的知识,那么使用C++。
《Accelerated C++》(sanitised Amazon link)是一本很棒的书,可以从C++的角度学习C++,而不仅仅是附加其他部分的C。
而对于学习C,IMHO,《K'n'R C》(sanitised Amazon link)仍然是最好的选择!
顺便说一句,对于C++,请跟随Scott Meyers在《Effective C++》系列书籍中的智慧!以及他的《Effective STL》书籍。
希望有所帮助。
祝好,
Rob
bash$ man malloc