c编程的特点,使其独特(和更好)

C编程语言是所有现代编程语言之母。几乎现在使用的每一种语言都包含了一些最早出现在C语言中的特性。...

C编程语言是所有现代编程语言之母。几乎现在使用的每一种语言都包含了一些最早出现在C语言中的特性。它已被广泛用于为最小的嵌入式微型计算机向最大的大型机和超级计算机编写软件。

characteristics-c-programming

用C语言编写的应用程序种类繁多,从系统软件、桌面软件、企业软件、数据库等等。掌握C语言的基础知识,你就能很好地开始编程生涯。

c语言简史

C语言的发展与Unix密切相关。它是在1972年左右发展起来的,后来又增加了一些。

在C语言开发之前,Unix操作系统是使用其汇编语言为PDP-7计算机开发的。后来在这个平台上构建了一个C编译器,再次使用汇编语言。在这个时候,C被设计用来简化Unix本身的开发。使用这个编译器,Unix完全用C语言为PDP-11计算机重写。同样,C语言编译器是用C重写的(当然,在优秀的lex和yacc工具的帮助下),从而完成了C/Unix引导过程。

Unix用C重写的主要原因是为了可移植性。由于不同CPU体系结构的汇编语言是不同的,因此将Unix操作系统移植到每个体系结构将是一项重大的工作。通过开发诸如C之类的系统语言,并用C重写Unix操作系统,这项工作减少了几个数量级。

一旦这种语言被开发出来,人们就认识到它可以用来编写比系统软件多得多的东西。因此,C开始用于编写软件,如文件服务器、数据库服务器、网络堆栈、桌面软件(以及后来的web服务器)等。

c programming language first edition cover

1978年,briankernighan和dennisritchie出版了《C编程语言》一书。这本书作为非正式的C语言规范使用了很多年,直到1989年C被ANSI正式标准化。C的最新版本是C11,发布于2011年。

现在让我们看看C的一些特性,这些特性使它与众不同。

随着越来越复杂的软件是用C语言开发的,人们认识到面向对象的概念(包括封装、多态性等)将有助于管理复杂性。这导致了C++作为C的超集的发展。

C++是在编写面向对象软件时增加某些特征,同时又保持C++的兼容性。它是用渐进增强的思想发展起来的——对C语言进行兼容的修改,使C和C++模块可以在同一程序中结合,并用同一编译器编译。这使得旧的基于C的模块能够在使用面向对象概念编写的大型程序中以最小的更改被重用。

理论上,C程序可以由C++编译器编译而不需要任何更改。然而,在实践中,C++强制执行的更严格类型检查会导致错误,需要对代码进行一些更改。

少量关键字

尽管C语言很强大,但它一直是一种小型语言。这是因为它只将32个单词声明为具有特定含义的关键字。相比之下,C++声明了82个关键字,java有50个保留关键字,JavaScript有63个。COBOL声明了高达357个关键字。想象一下,要记住和避开这么多的关键字是多么令人头痛!

没有显式字符串类型

与大多数现代语言不同,例如java、C++和JavaScript,C不提供单独的字符串类型。字符串被认为是以0字符(表示为“\0”)结尾的字符数组。字符串的长度由约定表示:0字符之前的字符数。您可以忽略它,并在“\0”之后计数或存储。由于缺少合适的字符串类型和约定,多年来导致了无数的错误,称为缓冲区溢出。

事实上,第一个攻击互联网的蠕虫,Morris互联网蠕虫,就是一个被称为finger daemon的关键系统软件中的漏洞造成的。

下面是这样一个bug的例子。它说明了在程序中引入这样的bug是多么容易。程序编译良好,但由于缓冲区溢出而崩溃。

# include <stdio.h>
main()
{
char *buf = "hello world";
buf[12] = 'a';
printf("%s
", buf);
}

相比之下,大多数现代语言都提供了显式的字符串类型,这使得这种恶作剧成为不可能。即使编译上述代码精细的C++,也提供了一个显式的STD::string类型。

指针操作

指针是对内存位置的引用。在读写任意内存位置时,C是完全灵活的。这种灵活性需要付出巨大的代价,并且是软件领域中许多错误的原因。影响整个互联网的最显著的缺陷包括web服务器、邮件服务器和ftp服务器中的漏洞。即使在今天,偶尔也会有关于引用和更新无效内存位置导致的错误的新闻报道。

pointers

2014年发现的臭名昭著的SSL HeartBleed安全漏洞是指针位置管理不当的结果,说明了在C中正确管理指针的重要性。

甚至在Windows系统上偶尔出现的BSOD(“蓝屏死亡”)错误也可能是由于指针处理不当造成的。

除了C++之外,语言不允许指针操作,因此不易受这些类错误的影响。

数组和指针可以互换

在C中,数组引用和指针是可互换的。这种语言允许在需要指针的地方使用数组引用,反之亦然。虽然这允许强大的操作,但它也导致了许多臭名昭著的错误。

广泛使用“define”宏

宏用于替换不同扩展名的名称。它们可用于在编译时更改名称的定义,或用较长的扩展名替换简单名称。C宏系统支持允许条件编译的ifdef条件。这是将软件移植到不同体系结构和操作系统的一种方法。泛型名称在编译时定义并替换为不同条件下的不同扩展。

还可以包括或消除使用这些宏编译的整个代码段。

它们被禁止,但在C++中可用。其他语言(如Java、JavaScript、python等)不提供类似的功能。

封装在文件中的模块

C没有类的概念,因此不支持独立的公共、私有和受保护可见性的概念。C提供的唯一封装是文件的封装。在源文件中定义的函数、全局变量和类型仅在该文件中可见,除非导出名称。关键字static和extern用于控制变量名和函数名的可见性。

相比之下,其他语言,如C++、java和Python,一般支持类,以及与类一起使用的封装。

外部库

除了基本的语言构造,C中更复杂的功能被委托给外部库。字符串操作、数学、输入输出、网络等都由外部库提供。与此相反,其他语言通常都有一个存储良好的模块库。

这涵盖了C语言的一些基本特性,特别是那些使它区别于其他语言的特性。

你和C一起工作过吗?你喜欢它还是更喜欢用其他语言?请在下面的评论中解释。

  • 发表于 2021-03-13 04:35
  • 阅读 ( 216 )
  • 分类:编程

你可能感兴趣的文章

c(c)和目标c(objective c)的区别

关键区别——c与目标c 编程语言对于为计算机执行特定任务创建有意义的指令集非常有用。两种广泛使用的编程语言是C和Objective C。Objective C是基于C语言的。因此,C程序可以作为目标C进行编译和运行。目标C由基本C以及面向...

  • 发布于 2020-10-16 06:52
  • 阅读 ( 262 )

目标c(objective c)和敏捷的(swift)的区别

...c与swift Objective C和Swift是广泛用于IOS和Mac应用程序开发的编程语言。Objective C是一个具有面向对象和其他新特性的C语言的超级集合。Swift是苹果开发的一种新语言。Objective C和Swift的关键区别在于,Objective C是一种通用编程语言,...

  • 发布于 2020-10-19 22:48
  • 阅读 ( 368 )

寻找最好的编程语言?从这里开始!

无论你是一个编程新手还是一个从未接触过的编程新手,最重要的问题是:“哪种编程语言适合我?” ...

  • 发布于 2021-03-12 12:24
  • 阅读 ( 305 )

为什么c编程仍然值得学习

... 你可能听说过C是一种“低级语言”,在编程的上下文中,“级别”是对你与计算机本机指令集的接近程度的描述。级别越低,就越接近于编写机器代码。级别越高,语言所做的抽象就越多,从而使您远离编写机...

  • 发布于 2021-03-13 03:02
  • 阅读 ( 315 )

为什么java虚拟机可以帮助代码更好地运行

...包和框架?您想知道java为应用程序提供了哪些优于本机编程的优势吗?继续读下去! ...

  • 发布于 2021-03-13 07:13
  • 阅读 ( 247 )

如何学习c编程与这个初学者的项目

学习编程是一种积累的经验。除了学习所选语言的语法外,还必须学习所有编程语言使用的一般原则。 ...

  • 发布于 2021-03-22 14:01
  • 阅读 ( 215 )

编写你的第一个应用程序的9个最好的免费代码编辑器

无论您是编程新手还是已经编写了一段时间的代码,您仍然需要可靠和智能的代码编辑工具来构建应用程序。幸运的是,现在可以****各种第三方代码编辑器和集成开发环境(ide)。 ...

  • 发布于 2021-03-30 00:13
  • 阅读 ( 259 )

为什么编程语言能够生存?

为什么有些像C这样的编程语言表面上已经被较新的语言淘汰了,但仍然坚持使用呢?《连线》关注了普林斯顿大学和加州大学伯克利分校研究人员里奥·梅耶洛维奇和阿里·拉布金的工作,他们试图通过调查程序员和搜索SourceForg...

  • 发布于 2021-04-22 17:41
  • 阅读 ( 117 )

python(python)和去(go)的区别

Python和Go都是功能强大的高级编程语言,用于编写web应用程序,但是Python相对容易学习但很难掌握,而Go是一种很难学习但很容易掌握的语言。Python是快速开发、生产部署和可伸缩系统的理想首选。Python是未来,每个人都朝着它...

  • 发布于 2021-06-25 22:32
  • 阅读 ( 218 )

C(c)和C++(c++)的区别

C和C++的主要区别在于C支持结构化编程,而C++是C的超集,它支持结构编程以及面向对象编程(OOP)。 C是一种通用的编程语言,它是大多数现代编程语言的基础语言。另一方面,C++是C语言的一种增强。任何C程序都是一个有效的C+...

  • 发布于 2021-07-01 12:20
  • 阅读 ( 236 )
潮想力inforce
潮想力inforce

0 篇文章

相关推荐