首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为一名Java开发人员,C还是C++?

作为一名Java开发人员,C还是C++?
EN

Stack Overflow用户
提问于 2009-01-21 00:02:05
回答 11查看 2.4K关注 0票数 10

在过去的5年里,我一直在专业地编写Java。最近,我不得不深入研究JNI来调用一些Windows特定的函数。

这段经历突显出我对C(或C++ )语言的掌握很差。我对C语言的唯一介绍是11年前我在高中读过的一本简短的“哑巴”书。

我知道这两种语言都在这个时间框架内取得了进步,特别是C++和标准库。

我学习C或C++合适吗?哪本书是最好的?

大家对Windows编程也有什么建议吗?我可以很好地阅读MSDN来理解某些API调用,但我有一种感觉,我遗漏了一些关于“大图景”的东西。

谢谢

EN

回答 11

Stack Overflow用户

发布于 2009-01-21 00:31:33

问得好。从表面上看,推荐C++是显而易见的,因为“它像Java一样是面向对象的”。唯一的问题是,这不是真的..是的,C++允许OOP,但它只是C++支持的几种范式之一。把C++当做OOP语言(特别是把它当做Java)只会让人沮丧。

问题是Java和C++实际上并没有太多的共同点。Java程序员通常认为Java是受C++启发的,但只有当您所说的C++指的是C++的最早版本时才是真的,更恰当的说法是“带类的C语言”。从那时起,C++以自己的方式完全转变为自己的语言。从那时起,它的变化可能比Java大得多。当时的Java程序员仍然能够理解今天的Java代码。但对于C++来说,情况并非如此。所以我认为C实际上比“现代C++”更接近Java语言。如果你把Java去掉GC、类的概念和其他一些抽象,你就会得到C。要实现C++,您还必须向我们假设的精简版Java添加类似数量的功能。

此外,C++是一种非常复杂的语言,学好它需要很长时间。如果你没有学好它,你就会一次又一次地砸自己的脚。

最后,这取决于你的目标。C++是一种比C更现代的语言,一旦你学会它,它就会非常有表现力和强大,令人惊讶的是,它甚至可以非常优雅和简洁。但是,学习曲线是令人讨厌的。因此,对于长期的本机编程,我会推荐C++而不是C。

但是,如果您的目标主要是与Win32应用程序接口(或其他原生API )交互,则不需要C++。Win32和大多数其他应用编程接口都是用C编写的,而不是C++,而且在任何情况下,您都不需要非常复杂的代码来实现它们之间的接口。

关于学习Win32,你是对的,你需要的所有细节都在MSDN上。如果你想要大局,Petzold是关于这个主题的书。

票数 37
EN

Stack Overflow用户

发布于 2009-01-21 00:15:33

我想这取决于你的目标。

如果你想更接近机器,那么C。

如果您想在C语言之上补充有关类似于Java的OO层的知识,那么可以使用C++。

Accelerated C++ (sanitised Amazon link)是一本很棒的书,可以从C++的角度来学习C++,而不仅仅是从C语言的角度来添加其他内容,

而K‘n’go (sanitised Amazon link)仍然是学习C语言的好方法!

顺便说一句,C++在Effective C++书籍中引用了Scott Meyer的智慧!还有他那本有效的STL书。

HTH

干杯,

抢夺

票数 8
EN

Stack Overflow用户

发布于 2009-01-21 00:52:39

学习足够的C++来将其用作“更好的C语言”。您不必尝试将所有这些都映射到您对Java的理解上。你所想要的就是能够使用C++对象作为抽象数据类型,新的和删除的,等等。

真正的问题是:为什么您认为JNI是绝对必要的?Windows调用将会破坏任何保持你的应用程序可移植性的想法。我坐在一个不得不深入研究使用JNI的Java应用程序的人旁边。它会随机关闭带有SEG故障的服务器。他的假设是堆填满了,对调用malloc的例程进行JNI调用,以分配堆上的空间。它不可用,例程不检查返回的指针是否为null,释放它,服务器就会宕机。他仍在尝试在本地重现错误,因为在GC启动之前调用JJNI方法需要精确的时间。

100%确定它们是必需的吗?只是问问..。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/463618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档