C到底有多重要
我曾听人说过,我们所学过的c只是冰山一角,只是一些语法,语义,规则什么的。c语言难吗,难,光是这些语法,我们能够理解透彻就算不错了。而真正精通c语言是冰山下面的部分。是毁灭谭泰尼克号的真正力量。
C 作为一门工程实用性极强的语言,提供了对操作系统和内存的精准控制,高性能的运行时环境,源码级的跨平台编译等优点,才是我们必须学习和使用 C 的理由。
历史
C 语言是由美国 AT&T 贝尔实验室的研究员 Dennis Ritchie 在 B 语言的基础上,最初作为改造 Unix 操作系统的开发语言,并伴随着 Unix 操作系统兴起而流行,后来,随着微型计算机的发展,C 开始被移植到其他操作系统平台上,成为独立的程序设计语言。
下图摘自 TIOBE 编程语言排行榜,过去 30 年 90% 时间里 C 都是独领风骚的,仅偶尔被 Java 超越
应用的行业总结
C语言优点
结构化设计语言,语法清晰、结构简单,模块化使得程序的各个部分除了必要的信息交流外彼此独立,便于开发、调试以及调试。
1)运算符多,把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
2)数据结构丰富,能实现各种复杂的数据类型的运算,引入指针、结构体概念使程序效率更高。
3)为操作系统而生,可以像汇编语言一样对位、字节和地址进行操作,允许直接访问物理地址对硬件进行操作,把高级语言的基本结构和语句与低级语言的实用性结合起来。
4)程序执行效率高,一般比汇编程序生成的目标代码效率低 10%~20%。
5)可移植性好,C 语言抽象了针对 CPU 编程的细节,能广泛应用于针对大型操作系统和系统软件的编写。
6)具备强大的绘图功能,和 C++ 一样也可以写出很优雅的二维、三维图形和动画。
详细的说下c的应用的优点和C++做对比
1)隐式操作:C 简单直接、结构清晰,每行代码都能清楚的被反汇编成相应的语句,系统会严格按照你的代码去执行。而 C++ 则不尽然,简单的语句也说不清楚究竟有多少次构造和拷贝,这样编写底层代码是完全不行的,底层需要精准和严格的控制。
2) 语言接口:现代软件工程项目的开发,不但对性能有很高要求,对于语言接口的对接能力也有很高要求,因为偌大的一个项目很少仅使用一种语言来进行开发,对于 底层,C++ 对内存和硬件的控制不如 C 简洁精准;对于很多动态语言和中间件,如:PHP、Python 和 Apache、Redis,都受了 C 的很大影响,甚至就是 C 开发出来的东西,对接起来非常方便。没错儿,其实 C++ 采用迂回的方式也能对接的,但是,远远不如 C 方便,开发和维护成本非常高。
硬件层:
1>分配内存:系统加电后运行,经过汇编初始化栈,然后再跳转到 C 语言的 start_init() 函数去,这时候内存分配机制都还没有建立,C++ 如何定义类?如何实例化对象?
2>标准库依赖:C 的所有特性都可以不依赖任何库运行,如有必要,可以按照特定需求自己编写库。
3>处理器兼容:C++ 的类是依赖基地址+偏移地址的寻址方式,很多微处理器只有简单的给定地址寻址,不支持一条语句实现 base + offset 的寻址机制,很多 C++ 代码编译出来需要更多的指令来运算地址,导致性能下降了太多。
4)应用层:C++ 在做应用层尤其是 GUI 编程,这是 C++ 的传统强项,我一直坚持 C 也能优雅的做出图像和动画,但开发效率确实较 C++ 低很多,最近有个很火的 RUST 语言,号称是未来唯一能取代 C++ 的编程语言,感兴趣的同学可以多关注下。
学习C语言的方法
实话实说,C 是一门很难学习和使用的编程语言,没有编译原理、操作系统,数据结构与算法,和计算机体系结构扎实的基础知识,根本不可能把 C 学的明白、用的顺手。
但是现在已经是漫天信息和互联网的时代,以前只是匮乏的时候说知识就是力量,而现在图书馆的知识最多,可它并没有改变世界的力量,只有把知识应用起来才是力量,信息我们已经不缺乏,缺少的是如何转化为自己的知识并且应用起来获取力量。
学法方法也是最终的,有一套好的学习方法是我们持续进步的法宝,现在技术更新换代很快,只有掌握快速学习的方法才能跟得上时代,我想说的是我们要自己找适合自己的学法方法,不要听别人说,更不要把别人的方法拿过来就用,思考方法和解决问题的能力才是我们根本的竞争力,有点扯远了
一:根据我自己的能力,首先没必要深入研究,那是工作后的事情
二:对着视频学习,然后找面试题,查漏补缺针对知识点强化
三:做大量的练习,哪怕是照着抄都所谓,能理解能看懂就行。
四:一定要自己做个项目。目标是十万行代码 一年内完成相当于每天300行代码 非常的难