C语言现在是否仍然必要学习?如果是,它有哪些优势?
C语言的优点有三个:
- 代码简洁。
- 运行迅速。
- 功能强大。
我们首先来看C语言的第一个优点,即代码量很小。这意味着,使用C语言编写的程序相对于其他语言来说,所需的容量更小,以完成相同的功能。
举例来说,Microsoft Word和WPS都是办公软件,功能相似,但WPS的安装文件只有约50MB,而Microsoft Word的安装文件超过500MB甚至接近1GB。原因在于WPS的内核采用了C语言编写。
C语言的第二个和第三个优点在于其运行速度较快和功能强大。我们可以通过一个例子来解释。全球三大操作系统,UNIX操作系统、Windows操作系统和Linux操作系统,它们的内核都采用了C语言编写。
这三大操作系统的内核均采用了C语言编写。为什么选择C语言呢?因为C语言的速度最快。计算机中所有的软件都是在操作系统上运行的。如果操作系统的速度很慢,那么基于其运行的软件速度也会变慢。此外,计算机中的所有硬件都由操作系统控制。
举个简单的例子,你可以新建一个Word文档,这就意味着在硬盘上产生了这个文件。但是你并没有直接控制硬盘,我们是通过操作系统提供的“右键单击”等功能来新建文件的。也就是说,操作系统给我们提供了一个界面,或者说是给我们提供了一种可操作的手段,通过这个手段我们可以删除文件、新建文件、打开文件或者修改文件。
因此,操作系统非常重要,所有的硬件都由操作系统控制。而这么重要的东西只能用C语言来写,所以C语言非常重要。为什么只能用C语言写?首先,C语言速度够快;其次,C语言可以访问硬件,因此它非常强大。
为什么不能用Java来写呢?首先,Java速度太慢;其次,Java语言没有指针。没有指针就不能访问硬件,因此其功能是不够的。指针是什么稍后会讲,它是C语言中非常重要的内容。
C语言的缺点
任何语言都有其优点和缺点。C语言的缺点可以总结为以下三点:
- 高风险。
- 开发周期长。
- 缺乏可移植性。
在第一点中,我们可以看到一个重要区别。在Java中编写同样的程序会导致错误,而在C语言中则不会。为什么呢?这是因为C语言的设计理念是:你想怎么写程序就怎么写,只要你的写法不是太离谱,就会被视为具有特殊含义而被接受。但是Java不同:只要你的写法存在歧义,或者写得不够好,它都会报错。
例如,在C语言中,你可以将一个浮点型数据赋给一个整型变量,编译时只会警告,因为会丢失精度,但是在Java中这样写就会报错,因为它在语法上就禁止你这样写。所以不同的语言对同样一个问题有不同的处理方式。
大家想想这样导致的结果是什么?因为有歧义的程序也可以通过,这样就会有很多漏洞,黑客往往会抓住这些漏洞进行攻击。所以说C语言比较危险。这也是为什么C语言比较难学的原因,因为你学完之后编写一个程序很可能就是错的,但又很难发现。所以前面说C++从安全性上对C语言进行了升级。
第二个是它的开发周期比较长。因为C语言是面向过程的语言,面向过程语言的一个特点就是写大项目的时候很容易“崩溃”。当代码上到10万行的时候很容易崩溃,会出现各种各样莫名其妙的错误。这时候就需要用另外一种思想将整个程序的框架重新设计一下,即用面向对象的思想设计。这也是C语言现在没有Java流行的原因。
C语言的第三个缺点是可移植性不强。这个主要是针对Java的。Java的可移植性太强了,所以就显得C语言的可移植性不强。什么叫可移植性?就是说Java程序在哪个机器上都可以运行,而且结果一模一样。而C语言就不行,C程序在其他机器上不一定能运行。而且就算能运行,结果可能也不一样。这是因为C语言对不同的硬件和操作系统的适应性不如Java好。在不同的机器上,C语言程序可能需要进行修改才能正确运行,而Java程序则不需要。因此,虽然C语言在一些特定的平台上表现很好,但在整体上,它的可移植性确实不如Java。
如有裨益,吾之幸也