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 程序员无比烦躁。

都是图灵完备的语言。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更多。

一个团队水平高低,从其编程规范就可见一斑。水平越高,往往规矩越多。

当然,真正的高手,都是气剑双修的,在语法层面几乎都是朴实无华,从不炫技,人家炫的是思想。

-END-

来源:https://www.zhihu.com/question/28834538/answer/1654211948

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查询计算机专业及选修了英语的学生,实验五 数据库综合查询(学生)

实验五 数据库综合查询一、实验目的1. 掌握SELECT语句的基本语法和查询条件表示方法; 2. 掌握查询条件种类和表示方法; 3. 掌握连接查询的表示及使用; 4. 掌握嵌套查询的表示及使用; 5. 了解集合查询的表示及使用。二、实验内容1.…

python读取写入文件_Python文件读写保存操作

记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之后,下面开始动手写代码&am…

css中设置br标签之后的样式_CSS学习

语法:选择器,声明(由一个属性和一个值)注释:/* */选择器:1. id选择器,class选择器2. 组和选择3. 属性选择创建:外部样式表html <head> <link rel"stylesheet" type"text/css" href"mystyle.css"> </head>内部样式表html <h…

eclipse扩展点_Eclipse扩展点评估变得容易

eclipse扩展点编码Eclipse扩展点评估有点冗长&#xff0c;而且很少能自我解释。 当我最近忙于自己忙于这个话题时&#xff0c;我写了一个小助手&#xff0c;目的是减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 它原来是不容易找到一个表现的解决方案&am…

扯淡!C语言怎么可能被淘汰呢?

“第一门编程语言学C靠谱吗&#xff1f;”“C还有未来吗&#xff1f;”“我应该考虑学C吗&#xff1f;”“C太老了吧&#xff01;”你是否也听过类似的话语&#xff1f;听说过无数次&#xff0c;有些是面对面的交谈&#xff0c;而有些来自某个论坛。虽然答案无非是“取决于具体…

如何正确运用计算机技术,如何正确认识与运用计算机网络技术.doc

如何正确认识与运用计算机网络技术如何正确认识与运用计算机网络技术摘要&#xff1a;正如每个人所见&#xff0c;在中国当前的形势下&#xff0c;从小培养计算机网络技术人才还是个薄弱环节。作为中小学计算机网络技术教师的我们必须在透彻了解本校或本地区学生对计算机网络技…

google账号解除游戏绑定_附方法!关于物联卡手机号的绑定与解绑

我们在使用物联卡时第一步都知道绑定手机号&#xff0c;只有绑定了手机号我们才能进行正常的充值、续费、查询等日常操作&#xff0c;当我们不再使用这些物联卡时&#xff0c;你知道怎么解绑吗&#xff1f;今天&#xff0c;我们以中国移动物联卡为例&#xff0c;咱们来看一下移…

elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优

基本概念定义一个分布式的实时文档存储&#xff0c;每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展&#xff0c;并支持 PB 级别的结构化或者非结构化数据用途全文检索结构化搜索分析VS传统数据库传统数据库提供精确匹配ES提供精确匹配全文检索…

spark wai_WAI-ARIA对自动完成小部件的支持

spark wai在这篇文章中&#xff0c;我想讨论一个AutoComplete小部件的可访问性。 在您键入该字段时&#xff0c;通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中&#xff0c;我基于Twitter的Typeahead &#xff08;一个灵活JavaScript库&#xff09;实现了JSF组件&…

快速学习C语言的途径,让你少走弯路!

1标准C语言能干什么&#xff1f;坦白讲&#xff0c;在今天软件已经发展了半个多世纪&#xff0c;单纯的C语言什么都干不了。标准C语言库只提供了一些通用的逻辑运算方法以及字符串处理&#xff0c;当然字符串在C语言看来也是一种操作内存的方法&#xff0c;所以单纯的C什么都做…

计算机基础教育学,计算机基础教育教学改革与创新

计算机基础教育教学改革与创新伴随《国家中长期教育改革和发展规划纲要(2010-2020)》的颁布,我国计算机基础教育进入一个新的发展阶段,对计算机基础教育"面向应用、能力导向、注重素质"指导思想的深入研究和实践是深化计算机基础教育教学改革的切入点。下面是小编搜集…

南京python基础教程_南京Python课程价格

1.每个算法模块按照“原理讲解→分析数据→自己动手实现→特征与调参”的顺序。 2.“Python数据清洗和特征提取”&#xff0c;提升学习深度、降低学习坡度。 3.增加网络爬虫的原理和编写&#xff0c;从获取数据开始&#xff0c;重视将实践问题转换成实际模型的能力&#xff0c;…

neo4j 嵌入式_在嵌入式Neo4j中使用Neo4j浏览器

neo4j 嵌入式有时&#xff0c;您有一个应用程序以嵌入式模式使用Neo4j&#xff0c;但还需要使用Neo4j Web浏览器来处理图形。 由于一次最多只能从一个进程访问数据库&#xff0c;因此在嵌入式Neo4j应用程序运行时尝试启动Neo4j服务器将不起作用。 WrappingNeoServerBootstrapp…

C语言学习趣事_你不知道的C语言应用

一、引我一直不明白“文人相轻”是什么意思&#xff0c;也许就是说&#xff1a;文人清客之间互相瞧不起的事情吧。但对于我来说&#xff0c;文人相轻就是表示&#xff1a;无知者无畏。无论你的某一方面的语言学的怎么样&#xff0c;怎么样的牛逼&#xff0c;你可以眼光狭窄&…

微信小程序销毁某一注册函数_微信小程序云开发API 删除一条记录

Document.remove删除一条记录函数签名如下&#xff1a;function remove(options: object): Promise参数说明options 为必填参数&#xff0c;是一个如下格式的对象&#xff0c;如传入 success、fail、complete 三者之一&#xff0c;则表示使用回调风格&#xff0c;不返回 Promis…

html打开显示脚本错误,IE浏览器显示脚本错误怎么解决?IE浏览器脚本错误解决方法图文教程介绍...

只要一打开网页&#xff0c;就会弹出一个“当前页面的脚本发生错误”提示框&#xff0c;如下图&#xff0c;不论按“是”或者“否”&#xff0c;当打开其它网页时&#xff0c;又会弹出一个这样的“脚本错误”提示框&#xff0c;这样的问题该如何解决呢。出现这样的情况&#xf…

jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机

对于java程序来说&#xff0c;手动发布服务端是耗时和无聊的&#xff0c;jenkins很好地解决了这个问题&#xff0c;闲着也是闲着就在树莓派上装个jenkins帮我们打包发布吧。这次我们需要安装三个软件&#xff1a;jdk&#xff1a;编辑java程序必要的。maven&#xff1a;maven结构…

java开发C编译器:结构体的解析和执行

用java开发C语言编译器结构体是C语言中&#xff0c;最为复杂的原生数据结构&#xff0c;它把多种原生结构结合在一起&#xff0c;形成一个有特点含义的数据结构&#xff0c;要实现一个完整的C语言编译器或解释器&#xff0c;就必须要拥有对结构体的解析能力&#xff0c;本节&am…

mysql查询会话池_用户会话,数据控件和AM池

mysql查询会话池最近&#xff0c;有人问我有关应用程序模块池的有趣问题。 众所周知&#xff0c;AM池包含用户会话引用的应用程序模块实例&#xff0c;这允许会话在后续请求时从池中获取完全相同的AM实例。 如果应用程序中有多个根应用程序模块&#xff0c;则每个模块都将拥有…

vc 控制台添加托盘显示_和硕县塑胶托盘塑料周转筐多少钱、延安塑料物流箱

他们正是利用了消费者的这种心理&#xff0c;往产品里添加一部分碳酸钙等重物质&#xff0c;不仅仅降低了他们的生成成本也极大的提高了产品自身重量&#xff0c;消费者却被蒙在鼓里。物流与采购联合会托盘专业委员会于2002年9月对北京、天津、上海、广州四大城的300余家生产、…