几种主流编程语言的优点和缺点比较,不服来怼

达尔文
 达尔文
发布于 2017年07月22日
收藏 35

在初级程序员阶段,每个人都不可避免遇到选择编程语言和职业方向的难题。我挑选了几个常见的编程语言,分析了优缺点和职业方向,以供想当程序员的人参考。

C/C++

一句话概括:大多数中国程序员的第一个语言

C语言是面向过程语言在当代的鲁殿灵光,常用于编写操作系统。C++是C语言的一个超集,既有指针又有对象使它成为最复杂的语言。

C/C++的优势:几乎所有现代编程语言都脱胎于C/C++,因此了解了C/C++,就了解了关于编程语言的一切,非常有利于快速掌握其他各类编程语言。

C/C++的不足:据说C/C++发明的时候为了提高入行门槛和行业收入水平刻意制造了学习难度。

C/C++的优势:C/C++可以被嵌入任何现代处理器中,几乎所有操作系统都支持C/C++,跨平台性非常好。

C/C++的不足:尽管C语言体型小巧,可最常使用的C++规模可观且拥有大量极为复杂的功能交互方式,容易造成资源浪费。

职业路线:

(1)首推Unix/Linux等操作系统软件的开发和嵌入式开发。

(2)Android ROM的定制,以及android App的NDK开发。

(3)用Cocos2d-x开发游戏也是C++程序员的好出路。

Java

一句话概括:最长寿的语言

Java是最典型的面向对象语言。Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等坑爹概念。今明两年毕业的大学生大多是Java的同龄人(1995年)。

Java的优势:Java平台不断迎来新功能,比如移动互联网时代的Android,大数据时代的Hadoop,人工智能时代的TensorFlow。

Java的不足:国内Java及其衍生技术的就业环境被培训班破坏得太厉害,培训班HR曾问我:“Android不吃香了,你能推荐几个hadoop讲师吗?”

Java的优势:Java是世界上使用范围最广的语言——Java环境安装时那句“3 Billion Devices Run Java”谁没见过?

Java的不足:Java占用大量内存,并且启动时间较长——搞Android的都被Windows系统中的Android AVD坑过。

职业路线:

(1)招聘网站上常见的“招聘Java开发”指的就是狭义的Java开发——基于JavaEE的后台开发,以前一度流行过SSH框架和SSM框架,现在入门建议学习SpringMVC框架。

(2)在移动互联网时代,Java可用于Android App开发。但Java之于Android的地位可能被Kotlin取代,并且近年培训班造成了低水平Android程序员的泛滥。

(3)在大数据时代,Java可用于Hadoop的开发,前景非常广阔,但可能有泛滥的趋势。

(4)在人工智能时代,Java可用于TensorFlow深度学习的开发。

C#

一句话概括:自称不是Java的Java语言

C#是微软看到Java太火了而发明的和Java语法差不多的语言。

C#的优势:C#的最大优势在于全面集成.Net库,提供出色的功能与完美的库访问能力。

C#的不足:由于集成.Net库造成跨平台能力太差。

C#的优势:VR时代的到来让Unity-3d开发者有很好的发展前景。

C#的不足:目前.Net在国内就业环境不太好,收入较低。

职业路线:

(1)招聘网站上常见的“招聘C#开发”和“招聘.Net开发”指的都是狭义的C#开发——基于.Net框架的后台开发。

(2)Unity-3d也用C#作为开发语言,除了能开发3D游戏,在VR时代也会大放光芒。

JavaScript

一句话概括:不是Java语言的语言。

javascript是一种动态类型、弱类型、基于原型的直译式脚本语言,也是使用频率最高的给HTML网页增加动态功能的语言。外行最常闹的笑话是以为它是Java语言的分支。

JavaScript的优势:作为脚本语言,JavaScript可立即运行而无需等待服务器响应,速度非常出色。

JavaScript的不足:代码在用户电脑上运行,可能会被别有用心的坏人恶意利用。

JavaScript的优势:JavaScript是动态类型语言,学习难度低。并且掌握了JavaScript语言就等于成为能同时开发网页(HTML5)、后台(Node.js)、移动端(React Native、Weex)的全栈工程师。

JavaScript的不足:JavaScript过于依赖浏览器,在不同的浏览器上有不同的表现。

职业路线:

(1)首选html5的初心:网站和手机站的前端页面开发。

(2)用node.js或Bmob云端代码进行后台开发

(3)基于react Native、PhoneGap、Weex、HBuilder、AppCan进行移动开发,只需写一遍代码,就有Android和iOS两个软件

(4)微信开发:包括微信公众号、微信小游戏、微信小程序。不要把这个方向当成中国特色方向,国外的Android机也是需要PWA开发的。

(5)如果以上四样全能做到,那么你就是全栈工程师。

SQL

一句话概括:数据库离不开的语言

SQL是一种专精于数据库的特殊目的语言。用于存取数据以及查询、更新和管理关系数据库系统。

SQL的优势:存储过程可以重复使用,可减少数据库开发人员的工作量,开发速度快。

SQL的不足:和Java语言的大多数设计模式一样,SQL开发速度是靠牺牲运行速度换来的。

SQL的优势:SQL可设定只有某此用户才具有对指定存储过程的使用权,安全性好。

SQL的不足:不同数据库系统之间的SQL不能完全相互通用,可移植性差。

职业路线:

(1)掌握了SQL可以从事DBA(Database Administrator,即数据库管理员),主要负责业务数据库从设计、测试到部署交付的全生命周期管理。

Python

一句话概括:需要拿着游标卡尺学习的语言

python是一款服务器端解释型开源非编译脚本语言。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

Python的优势:Python学习简单,被誉为“最易学习的语言”

Python的不足:Python存在一些只在特定情况下才会出现(无法重现)的bug

职业路线:

(1)用Django框架进行Web开发:和Java没什么两样。

(2)用PIL框架进行图形处理

(3)物联网:Raspberry Pi等物联网平台都选择了Python作为开发语言

(4)Python有一个无所不能的Hack库,如果认为“打工时不可能打工的”就去当一个自由的黑客吧

PHP

一句话概括:世界上最好的语言

php是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。号称“世界上最好的语言”

PHP的优势:PHP学习简单,易于快速上手。

PHP的不足:PHP的运行速度比较慢。

PHP的优势:历久弥新的PHP拥有庞大而活跃的官方社区,开发者面临的大部分难题都有现成的解决方案,很多十几年前的解决方案在当代也有指导意义。

PHP的不足:PHP的错误处理机制比较糟糕,以为PHP需要支持大量旧版本的功能。

职业路线:

(1)适合进行Web开发,配合Node.js效果更佳。

Objective-C和Swift

一句话概括:被培训班害苦了的语言

objective-c和swift都是OS X和ios系统上的专用语言。Objective-C在三年前是国内收入最高的语言,从去年开始大量培训班输出了一大堆“三年经验”的速成“iOS工程师”成了脉脉匿名区的笑话。

Objective-C的优势:苹果提供了丰富的工具和库以便开发者使用Objective-C开发软件。

Objective-C的不足:Objective-C拥有自己独特的编程方法思路,与其他编程语言思路差别较大。

Swift的优势:随着时间推移,Swift在iOS和OS X软件中占的代码比例会越来越多。

Swift的不足:版本更迭太快,不同版本差别过大,近年发生过几次“从精通到重新入门”的情况。

Objective-C和Swift的优势:因为仅需要在少数平台上运行,不容易遇到兼容性问题。

Objective-C和Swift的不足:这俩语言的就业环境被培训班彻底毁了,现在才开始学这两种语言可能会有像2007年6000点时入市的散户的结局。

职业路线:

(1)这两种语言都是专为iOS和OS X服务的,入行前记得先准备一台苹果电脑和苹果开发者账号。近年培训班造成了低水平Objective-C和Swift程序员的泛滥。

Kotlin

一句话概括:运行在JVM但不是Java的语言

Kotlin 是最新问世的一个基于JVM的编程语言,专用于开发Android。

Kotlin的优势:和Java的互操作性极佳。其他JVM语言都实现了自己语言的标准库。而Kotlin则使用Java的标准库,只是对其进行了扩充。更轻巧,Apk更小。

Kotlin的不足:同时可能也继承了Java比较坑爹的东西。

Kotlin的优势:因为弱化了数据类型,学习成本较Java低。

Kotlin的不足:能且仅能在Android Studio 3.0上运行,这点有点像易语言。

职业路线:

(1)只能用来开发Android。即使你想干点别的,除了Android Studio 3.0 还有别的编译器吗?

来源:代码湾

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:几种主流编程语言的优点和缺点比较,不服来怼
加载中

精彩评论

句龙胤
句龙胤
开源中国可以关了。
这文章没什么问题,符合作者智商。
把这文章搞到首页就有问题了。
开源中国可以关了,别办了。
这种狗JB玩意都首页,可见开源中国已经没有高水准的人了
wei2011
wei2011
不懂装懂瞎评论,真是太不专业了:
对于C++:
"C/C++的不足:据说C/C++发明的时候为了提高入行门槛和行业收入水平刻意制造了学习难度。"
me:有种小卖部边听几个中年大叔讨论国家大事的感觉。。。

"C/C++的不足:尽管C语言体型小巧,可最常使用的C++规模可观且拥有大量极为复杂的功能交互方式,容易造成资源浪费。"
me:你知道你自己在说什么吗...可能你自己也不知道自己想说什么..

对于Java:
"一句话概括:最长寿的语言"
me:难道C或C++不比Java更老吗?

"Java的优势:Java平台不断迎来新功能,比如移动互联网时代的Android,大数据时代的Hadoop,人工智能时代的TensorFlow。"
"(4)在人工智能时代,Java可用于TensorFlow深度学习的开发。"
me:你知道TensorFlow官方支持的语言接口只有python和C++吗?

对于C#:
"C#的不足:由于集成.Net库造成跨平台能力太差。"
me:你知道.net Core吗?C#跨平台早已不是问题


对于JavaScript:
"JavaScript的优势:作为脚本语言,JavaScript可立即运行而无需等待服务器响应,速度非常出色。"
me:你知道自己想说什么吗?好吧,可能说在说JavaScript天生支持异步


"JavaScript的不足:代码在用户电脑上运行,可能会被别有用心的坏人恶意利用。"
me:怎么恶意利用法,说来听听

对于SQL:
"SQL的不足:和Java语言的大多数设计模式一样,SQL开发速度是靠牺牲运行速度换来的。"
me:真是无语,你还是不知道自己想说什么


对于Python:
"Python的不足:Python存在一些只在特定情况下才会出现(无法重现)的bug"
me:python什么情况下会出现什么bug说来听听?


对于PHP:
"PHP的不足:PHP的运行速度比较慢。"
me:你知道PHP7出来后,在脚本语言里,运行速度数一数二么

"(1)适合进行Web开发,配合Node.js效果更佳。"
me:PHP和Node.js都是后端语言,你会写一个网站php和node.js一起用么?
林宏源
林宏源
居然说kotlin居然要依赖as3?😂
滔哥
滔哥
居然没有人来留言,哈哈哈。我看到了PHP语言的不足居然是慢....
eechen
eechen
一看就是个浅薄的JAVAer写的.
还Java最长寿,不过别的,文中的Python都比Java生得早,更别说C/C++/SQL了.
Java不过是跟PHP都发布于1995年的语言.
还有,谁说C只能用来开发操作系统?
难道不知道Nginx/Apache/Redis/Memcached/PHP/Python/PostgreSQL甚至Android使用的SQLite都是C开发的么?

CSharp跨平台是一般,但人家的确有个dotNET Core能实现跨平台就对了.
CSharp开发者收入就低么?腾讯的王者荣耀就是用Unity 3D开发的,据说人家开发团队每人年度平均奖金是数百万.

既然说了Node.js,又说JS的不足是依赖浏览器,谁跟你说Node.js依赖浏览器了?精神分裂了么?

SQL本来就是一个数据库标准操作语言,你以为ORM可移植性就好?ORM底层还不是依赖SQL.
对于那些不通用不标准的SQL,你ORM一样无能为力,只能自己进行等价的封装.

Python缩进的语言是不太好,但不是有免费的IDE比如PyCharm来缓解这个问题么?

PHP明明是参考了Perl/C/C++,跟Java有个蛋关系,搞得好像OOP是Java首创似的.
还说PHP运行速度慢,PHP至少比Perl/Python/Ruby/Lua这些语言快,好不.
生成一个包含100万个元素的关联数组(映射/字典),PHP7的耗时仅为Node7的1/3:
https://static.oschina.net/uploads/space/2017/0507/114545_l2Gp_561214.png
还有,PHP异步支持里有Swoole,并不需要Node.js在辅助PHP开发.

你这个JAVAer就是不好学,居然认为Kotlin只能用来开发Android应用.
难道不知道Spring已经提供了对Kotlin的支持么?
还有,谁跟你说Kotlin就依赖IDE的?人家明明也提供有命令行下的SDK好么?
http://kotlinlang.org/docs/tutorials/command-line.html
安装: curl -s https://get.sdkman.io | bash && sdk install kotlin

最新评论(68

元谷
元谷
其他的不说, 最后一条说as3是唯一的编译器就已经错了。首先,as只是一个ide。其二,kotlin的编译器只要在gradle里加几行代码就行了。其三,kotlin还可以做服务器,比如vertx就支持kotlin
先进哥
先进哥

引用来自“AutoPlus”的评论

看到第一个就忍不住来怼了:C 和 C++ 是两个完全不同不一样理念、不一样效率、不一样目的的语言。C 和 C++ 屁关系都没有。C 是面向数据驱动编程,在 C 中所有的目标就是定义数据,一旦你定义好你的数据模型,你的算法就自然而然的显现了。C++ 则是打算面向对象又不肯放弃私有变量访问灵活度的二混子语言。每次看到有人把 C 和 C++ 写成 C / C++,我就知道这个人不仅 C 写的不行,C++ 也不行 .

引用来自“FPE”的评论

每次看到有人强行分开C和C++,我就知道这个人不仅不懂编译器,项目经验也没有

引用来自“AutoPlus”的评论

胡说八道,语言和编译器没有半点关系。C 有 GCC 编译器,也有 Clang 编译器,其目标语言是汇编语言。至于 C++,其编译器多了去了,不仅有免费的,还有付费的,其目标语言跟 C 已经没有任何关系。把 C 和 C++ 混在一起的即没有 C 经验也没有 C++ 经验,只是个会点 C++ 语法的半吊子。

引用来自“先进哥”的评论

说没半点关系,也就是在扯淡了。语言层面c++抛开类、模版之类特性,几乎兼容c代码。c++代码可以无缝调用c函数,他们具有几乎一样的语法结构。而在编译器层面,类及其成员和方法最终编译结果,完全可以与c的struct和函数二进制兼容。类方法编译结果就是一个特别命名的c函数,只是编译器自动把this指针作为第一个参数。所以,说c和c++完全是两个不相关需要,这TM就是扯淡。

引用来自“AutoPlus”的评论

你说的这都是屁话。任何一个跑在 Unix Linux Windows 的语言都和 C 的二进制兼容,因为操作系统是 C 开发的,他们必须兼容到 C 。什么 C++ 类、模板,无缝调用,纯粹是扯淡,Python 也可以调用 C。Nim-lang 可以直接编译成 C 或者 C++。你的编程经验不过 3 年,别再说无用的屁话了,和你说话降低我的身份

引用来自“先进哥”的评论

你python调用c的静态库试试,你python直接include c的头文件试试。什么叫直接调用?你python也不就是用了ctypes来做适配,而且只能调dll库。

引用来自“AutoPlus”的评论

回复@先进哥 : 你说这话就是纯粹扯淡。cpython 直接调用静态库,直接 include。难道说 python 可以动态调用 C 库?你完全不懂 Python 跟 C 怎么协作。另一方面,能够静态调用 C 库,能够 include C 库,就是跟 C 有关系,就可以放在一块? 简直是井底之蛙的愚昧之谈。随便举几个例子,Nim-lang 的目标语言就是 C,可以直接 include c,直接编译成静态 C 库,直接调用静态 C 库。Nim-lang 跟 C 有个屁关系?Nim-lang 还能直接编译成 C++,编译成 JavaScript 呢。再举例子 Kotlin,Kotlin 可以直接调用 Java,直接生成 Java,Kotlin 和 Java 有个屁关系?
如果CPython==Python,为什么前面还得加个C?如果C静态库能直调用,还要连接器干什么?C库链接时这么多链接参数都被吃了?
左边口袋
看到大家大战我就放心了
谁偷了我的名字
谁偷了我的名字
路过,仅此而已……
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“eechen”的评论

一看就是个浅薄的JAVAer写的.
还Java最长寿,不过别的,文中的Python都比Java生得早,更别说C/C++/SQL了.
Java不过是跟PHP都发布于1995年的语言.
还有,谁说C只能用来开发操作系统?
难道不知道Nginx/Apache/Redis/Memcached/PHP/Python/PostgreSQL甚至Android使用的SQLite都是C开发的么?

CSharp跨平台是一般,但人家的确有个dotNET Core能实现跨平台就对了.
CSharp开发者收入就低么?腾讯的王者荣耀就是用Unity 3D开发的,据说人家开发团队每人年度平均奖金是数百万.

既然说了Node.js,又说JS的不足是依赖浏览器,谁跟你说Node.js依赖浏览器了?精神分裂了么?

SQL本来就是一个数据库标准操作语言,你以为ORM可移植性就好?ORM底层还不是依赖SQL.
对于那些不通用不标准的SQL,你ORM一样无能为力,只能自己进行等价的封装.

Python缩进的语言是不太好,但不是有免费的IDE比如PyCharm来缓解这个问题么?

PHP明明是参考了Perl/C/C++,跟Java有个蛋关系,搞得好像OOP是Java首创似的.
还说PHP运行速度慢,PHP至少比Perl/Python/Ruby/Lua这些语言快,好不.
生成一个包含100万个元素的关联数组(映射/字典),PHP7的耗时仅为Node7的1/3:
https://static.oschina.net/uploads/space/2017/0507/114545_l2Gp_561214.png
还有,PHP异步支持里有Swoole,并不需要Node.js在辅助PHP开发.

你这个JAVAer就是不好学,居然认为Kotlin只能用来开发Android应用.
难道不知道Spring已经提供了对Kotlin的支持么?
还有,谁跟你说Kotlin就依赖IDE的?人家明明也提供有命令行下的SDK好么?
http://kotlinlang.org/docs/tutorials/command-line.html
安装: curl -s https://get.sdkman.io | bash && sdk install kotlin
OSC成立以来点赞次数最多的一条动弹, 让你了解一个真实的 @eechen ,传送门: http://my.oschina.net/bery/tweet/9658008
BaiYang
BaiYang
Java 比 C 长寿么?
FPE
FPE

引用来自“AutoPlus”的评论

看到第一个就忍不住来怼了:C 和 C++ 是两个完全不同不一样理念、不一样效率、不一样目的的语言。C 和 C++ 屁关系都没有。C 是面向数据驱动编程,在 C 中所有的目标就是定义数据,一旦你定义好你的数据模型,你的算法就自然而然的显现了。C++ 则是打算面向对象又不肯放弃私有变量访问灵活度的二混子语言。每次看到有人把 C 和 C++ 写成 C / C++,我就知道这个人不仅 C 写的不行,C++ 也不行 .

引用来自“FPE”的评论

每次看到有人强行分开C和C++,我就知道这个人不仅不懂编译器,项目经验也没有

引用来自“AutoPlus”的评论

胡说八道,语言和编译器没有半点关系。C 有 GCC 编译器,也有 Clang 编译器,其目标语言是汇编语言。至于 C++,其编译器多了去了,不仅有免费的,还有付费的,其目标语言跟 C 已经没有任何关系。把 C 和 C++ 混在一起的即没有 C 经验也没有 C++ 经验,只是个会点 C++ 语法的半吊子。

引用来自“FPE”的评论

呵呵,那么有c和c++经验的你来说说这函数编译出来的asm在c和c++中有何区别:int add(int a,int b){return a+b;}

引用来自“AutoPlus”的评论

你这问题提的完全是无知。编译出来的 asm 跟其使用的(厂商)编译器有关:GCC 使用内置的 as,其他的编译器则使用自己的一套工具(有的干脆就直接调用 GCC 的工具); 不同的编译器还有不同的优化器,其生成代码自然不同,在有的编译器你这行代码甚至直接就被 delete 了。这些跟你所使用的编译器有关系。不要问这么没有常识的问题。

引用来自“FPE”的评论

别逗我了好吗,不拿同一个编译器比还说个毛啊,到底是多弱智才会拿不同编译器比较啊,哈哈

引用来自“AutoPlus”的评论

回复@FPE : 哪来的同一个编译器? C++ 编译器能用 C 的编译器?不要把套件搞混了,套件真正运行的工具只有几个单元。连基本的常识都搞不清楚。

引用来自“FPE”的评论

难道在linux下你真以为c++就一定就用g++编译,gcc只能编译c?哈哈

引用来自“AutoPlus”的评论

回复@FPE : C 语言的编译器只会识别 C,而不会识别 C++。你用只能编译 C 的编译器去编译 C++,怎么可能会通过?GCC 的全名叫做 The GNU Compiler Collection, 是多个编译单元组成的。当编译 C 的时候,只会用到 C 的编译单元。你连这些常识都不懂,还谈论语言,纯粹是扯淡啊

引用来自“FPE”的评论

有两种2b我见得太多:1、说c比c++快的2b;2、说c#比vb.net快的2b。连最基本的东西都不会还学人谈常识来装逼也是醉了,这些2b喜欢怎么认为就怎么认为吧

引用来自“AutoPlus”的评论

回复@FPE : 说明你的编程认知非常薄弱,连最基本的常识都分不清楚,而且充分暴露你是个民科,没有系统的受过计算机科学的教育,你的所有的认知都是依靠想象而不是数据,这是民科最大的特征
就当是这样吧,你高兴就好😄
AutoPlus
AutoPlus

引用来自“AutoPlus”的评论

看到第一个就忍不住来怼了:C 和 C++ 是两个完全不同不一样理念、不一样效率、不一样目的的语言。C 和 C++ 屁关系都没有。C 是面向数据驱动编程,在 C 中所有的目标就是定义数据,一旦你定义好你的数据模型,你的算法就自然而然的显现了。C++ 则是打算面向对象又不肯放弃私有变量访问灵活度的二混子语言。每次看到有人把 C 和 C++ 写成 C / C++,我就知道这个人不仅 C 写的不行,C++ 也不行 .

引用来自“FPE”的评论

每次看到有人强行分开C和C++,我就知道这个人不仅不懂编译器,项目经验也没有

引用来自“AutoPlus”的评论

胡说八道,语言和编译器没有半点关系。C 有 GCC 编译器,也有 Clang 编译器,其目标语言是汇编语言。至于 C++,其编译器多了去了,不仅有免费的,还有付费的,其目标语言跟 C 已经没有任何关系。把 C 和 C++ 混在一起的即没有 C 经验也没有 C++ 经验,只是个会点 C++ 语法的半吊子。

引用来自“FPE”的评论

呵呵,那么有c和c++经验的你来说说这函数编译出来的asm在c和c++中有何区别:int add(int a,int b){return a+b;}

引用来自“AutoPlus”的评论

你这问题提的完全是无知。编译出来的 asm 跟其使用的(厂商)编译器有关:GCC 使用内置的 as,其他的编译器则使用自己的一套工具(有的干脆就直接调用 GCC 的工具); 不同的编译器还有不同的优化器,其生成代码自然不同,在有的编译器你这行代码甚至直接就被 delete 了。这些跟你所使用的编译器有关系。不要问这么没有常识的问题。

引用来自“FPE”的评论

别逗我了好吗,不拿同一个编译器比还说个毛啊,到底是多弱智才会拿不同编译器比较啊,哈哈

引用来自“AutoPlus”的评论

回复@FPE : 哪来的同一个编译器? C++ 编译器能用 C 的编译器?不要把套件搞混了,套件真正运行的工具只有几个单元。连基本的常识都搞不清楚。

引用来自“FPE”的评论

难道在linux下你真以为c++就一定就用g++编译,gcc只能编译c?哈哈

引用来自“AutoPlus”的评论

回复@FPE : C 语言的编译器只会识别 C,而不会识别 C++。你用只能编译 C 的编译器去编译 C++,怎么可能会通过?GCC 的全名叫做 The GNU Compiler Collection, 是多个编译单元组成的。当编译 C 的时候,只会用到 C 的编译单元。你连这些常识都不懂,还谈论语言,纯粹是扯淡啊

引用来自“FPE”的评论

有两种2b我见得太多:1、说c比c++快的2b;2、说c#比vb.net快的2b。连最基本的东西都不会还学人谈常识来装逼也是醉了,这些2b喜欢怎么认为就怎么认为吧
回复@FPE : 说明你的编程认知非常薄弱,连最基本的常识都分不清楚,而且充分暴露你是个民科,没有系统的受过计算机科学的教育,你的所有的认知都是依靠想象而不是数据,这是民科最大的特征
FPE
FPE

引用来自“AutoPlus”的评论

看到第一个就忍不住来怼了:C 和 C++ 是两个完全不同不一样理念、不一样效率、不一样目的的语言。C 和 C++ 屁关系都没有。C 是面向数据驱动编程,在 C 中所有的目标就是定义数据,一旦你定义好你的数据模型,你的算法就自然而然的显现了。C++ 则是打算面向对象又不肯放弃私有变量访问灵活度的二混子语言。每次看到有人把 C 和 C++ 写成 C / C++,我就知道这个人不仅 C 写的不行,C++ 也不行 .

引用来自“FPE”的评论

每次看到有人强行分开C和C++,我就知道这个人不仅不懂编译器,项目经验也没有

引用来自“AutoPlus”的评论

胡说八道,语言和编译器没有半点关系。C 有 GCC 编译器,也有 Clang 编译器,其目标语言是汇编语言。至于 C++,其编译器多了去了,不仅有免费的,还有付费的,其目标语言跟 C 已经没有任何关系。把 C 和 C++ 混在一起的即没有 C 经验也没有 C++ 经验,只是个会点 C++ 语法的半吊子。

引用来自“FPE”的评论

呵呵,那么有c和c++经验的你来说说这函数编译出来的asm在c和c++中有何区别:int add(int a,int b){return a+b;}

引用来自“AutoPlus”的评论

你这问题提的完全是无知。编译出来的 asm 跟其使用的(厂商)编译器有关:GCC 使用内置的 as,其他的编译器则使用自己的一套工具(有的干脆就直接调用 GCC 的工具); 不同的编译器还有不同的优化器,其生成代码自然不同,在有的编译器你这行代码甚至直接就被 delete 了。这些跟你所使用的编译器有关系。不要问这么没有常识的问题。

引用来自“FPE”的评论

别逗我了好吗,不拿同一个编译器比还说个毛啊,到底是多弱智才会拿不同编译器比较啊,哈哈

引用来自“AutoPlus”的评论

回复@FPE : 哪来的同一个编译器? C++ 编译器能用 C 的编译器?不要把套件搞混了,套件真正运行的工具只有几个单元。连基本的常识都搞不清楚。

引用来自“FPE”的评论

难道在linux下你真以为c++就一定就用g++编译,gcc只能编译c?哈哈

引用来自“AutoPlus”的评论

回复@FPE : C 语言的编译器只会识别 C,而不会识别 C++。你用只能编译 C 的编译器去编译 C++,怎么可能会通过?GCC 的全名叫做 The GNU Compiler Collection, 是多个编译单元组成的。当编译 C 的时候,只会用到 C 的编译单元。你连这些常识都不懂,还谈论语言,纯粹是扯淡啊
有两种2b我见得太多:1、说c比c++快的2b;2、说c#比vb.net快的2b。连最基本的东西都不会还学人谈常识来装逼也是醉了,这些2b喜欢怎么认为就怎么认为吧
AutoPlus
AutoPlus

引用来自“AutoPlus”的评论

看到第一个就忍不住来怼了:C 和 C++ 是两个完全不同不一样理念、不一样效率、不一样目的的语言。C 和 C++ 屁关系都没有。C 是面向数据驱动编程,在 C 中所有的目标就是定义数据,一旦你定义好你的数据模型,你的算法就自然而然的显现了。C++ 则是打算面向对象又不肯放弃私有变量访问灵活度的二混子语言。每次看到有人把 C 和 C++ 写成 C / C++,我就知道这个人不仅 C 写的不行,C++ 也不行 .

引用来自“FPE”的评论

每次看到有人强行分开C和C++,我就知道这个人不仅不懂编译器,项目经验也没有

引用来自“AutoPlus”的评论

胡说八道,语言和编译器没有半点关系。C 有 GCC 编译器,也有 Clang 编译器,其目标语言是汇编语言。至于 C++,其编译器多了去了,不仅有免费的,还有付费的,其目标语言跟 C 已经没有任何关系。把 C 和 C++ 混在一起的即没有 C 经验也没有 C++ 经验,只是个会点 C++ 语法的半吊子。

引用来自“先进哥”的评论

说没半点关系,也就是在扯淡了。语言层面c++抛开类、模版之类特性,几乎兼容c代码。c++代码可以无缝调用c函数,他们具有几乎一样的语法结构。而在编译器层面,类及其成员和方法最终编译结果,完全可以与c的struct和函数二进制兼容。类方法编译结果就是一个特别命名的c函数,只是编译器自动把this指针作为第一个参数。所以,说c和c++完全是两个不相关需要,这TM就是扯淡。

引用来自“AutoPlus”的评论

你说的这都是屁话。任何一个跑在 Unix Linux Windows 的语言都和 C 的二进制兼容,因为操作系统是 C 开发的,他们必须兼容到 C 。什么 C++ 类、模板,无缝调用,纯粹是扯淡,Python 也可以调用 C。Nim-lang 可以直接编译成 C 或者 C++。你的编程经验不过 3 年,别再说无用的屁话了,和你说话降低我的身份

引用来自“先进哥”的评论

你python调用c的静态库试试,你python直接include c的头文件试试。什么叫直接调用?你python也不就是用了ctypes来做适配,而且只能调dll库。
回复@先进哥 : 你说这话就是纯粹扯淡。cpython 直接调用静态库,直接 include。难道说 python 可以动态调用 C 库?你完全不懂 Python 跟 C 怎么协作。另一方面,能够静态调用 C 库,能够 include C 库,就是跟 C 有关系,就可以放在一块? 简直是井底之蛙的愚昧之谈。随便举几个例子,Nim-lang 的目标语言就是 C,可以直接 include c,直接编译成静态 C 库,直接调用静态 C 库。Nim-lang 跟 C 有个屁关系?Nim-lang 还能直接编译成 C++,编译成 JavaScript 呢。再举例子 Kotlin,Kotlin 可以直接调用 Java,直接生成 Java,Kotlin 和 Java 有个屁关系?
返回顶部
顶部