高效c语言0简介

简介

C语言是在20世纪70年代作为一种系统编程语言而开发的,至今仍然非常流行。系统语言的设计是为了在提供高级编程功能的同时,实现性能和对底层硬件的轻松访问。虽然其他语言可能提供较新的语言功能,但它们的编译器和库通常是用C语言编写的。C语言是为了与各种计算硬件和架构一起工作,而这些硬件和架构又受到物理学和数学的制约。C语言直接分层在计算硬件之上,这使得它对不断发展的硬件特性(如矢量指令)比通常依赖C语言的高级语言更加敏感。

根据TIOBE指数,自2001年以来,C语言一直是最受欢迎的编程语言或第二受欢迎的编程语言1。C语言的流行很可能归功于该语言的几个原则,被称为C语言的精神:

  • 相信程序员。一般来说,C语言假设你知道自己在做什么。这并不总是一件好事(例如,如果你不知道自己在做什么)。
  • 不要阻止程序员做需要做的事情。因为C语言是一种系统编程语言,它必须能够处理各种低层次的任务。
  • 保持语言的小而简单。该语言被设计成与硬件相当接近。
  • 只提供一种方法来进行操作。也被称为机制保护,C语言试图限制重复机制的引入。
  • 让它变得快速,即使它不能保证是可移植的。让你写出最佳效率的代码是首要任务。确保代码可移植、安全和可靠的责任被委托给你,即程序员。

C语言简史

  • C编程语言是由Dennis Ritchie和Ken Thompson于1972年在贝尔电话实验室开发的。
  • Brian Kernighan与Dennis Ritchie合著了《C编程语言》(K&R 1988)。
  • 1983年,美国国家标准协会(ANSI)成立了X3J11委员会来建立一个标准的C规范。
  • 1989年,C标准被批准为ANSI X3.159-1989,"编程语言C"。这个1989年版本的语言被称为ANSI C或C89。
  • 1990年,ANSI C标准被国际标准化组织(ISO)和国际电工委员会(IEC)的联合技术委员会采用(未作改动),并作为C标准的第一版C90(ISO/IEC9899:1990)出版。
  • C标准的第二版C99在1999年出版(ISO/IEC 9899:1999)
  • 第三版C11在2011年出版(ISO/IEC 9899:2011)。
  • C标准的最新版本是第四版,于2018年作为C17(ISO/IEC 9899:2018)出版。
  • ISO/IEC正在开发一个被称为C2x的新的主要修订版。根据JetBrains的2018年民意调查数据,52%的C程序员使用C99,36%使用C11,23%使用C的嵌入式版本。

C标准

C标准(ISO/IEC 9899:2018)定义了该语言,是语言行为的最终权威。虽然该标准可能是晦涩难懂的,但如果你打算编写可移植的、安全的和有保障的代码,你就需要了解它。C标准为实现提供了很大程度的自由度,使它们在各种硬件平台上都能达到最佳效率。实现是C标准中用来指代编译器的术语,定义如下:

一套特定的软件,在特定的控制选项下在特定的翻译环境中运行,为特定的执行环境进行程序翻译,并支持功能的执行。

这个定义表明,每个带有特定命令行标志的编译器,连同C标准库,都被认为是一个独立的实现,不同的实现可以有明显不同的实现定义的行为。这在GNU编译器集合(GCC)中很明显,它使用-std=标志来确定语言标准。这个选项的可能值包括c89、c90、c99、c11、c17、c18和c2x。默认值取决于编译器的版本。如果没有给出C语言方言选项,GCC 10的默认值是-std=gnu17,它提供对C语言的扩展。为了实现可移植性,请指定你所使用的标准。为了获得新的语言功能,指定一个最新的标准。在GCC 8及以后的版本中,一个不错的选择(2019年)是-std=c17。

因为实现有如此多的行为,而且其中有些行为是未定义的,所以仅仅通过编写简单的测试程序来检查行为是无法理解C语言的。3不同的平台上由不同的实现编译时,代码的行为可能会有所不同,甚至同一实现使用不同的标志集或不同的C标准库实现也会有所不同。代码行为甚至在不同版本的编译器之间也会有所不同。C标准是唯一一份规定了哪些行为对所有实现都是有保证的文件,以及在哪些方面你需要为变异性做计划。这主要是在开发可移植代码时关注的问题,但也会影响你的代码的安全性。

CERT C编码标准

The CERT® C Coding Standard, Second Edition: 98 Rules for Developing Safe, Reliable, and Secure Systems (Seacord 2014) )是我在管理卡内基梅隆大学软件工程研究所的安全编码团队时写的一本参考书。CERT的编码标准包含了常见的C语言编程错误的例子以及如何纠正这些错误。在本书中,我们参考了其中的一些规则,作为特定C语言编程主题的详细信息的来源。

本书适用对象

本书是对C语言的介绍。它的写法是尽可能让任何想学习C语言编程的人都能看懂,而不至于让人觉得枯燥无味。换句话说,我们没有像许多其他入门书籍和课程那样,过度简化C语言编程。这些过度简化的参考书会教你如何让代码编译和运行,但代码可能仍然是错误的。从这种来源学习C语言编程的开发者通常会开发出不合格的、有缺陷的、不安全的代码,最终需要重写(往往是早于晚于)。希望这些开发人员最终能从他们组织中的高级开发人员那里受益,他们会帮助他们解除这些关于C语言编程的有害误解,并帮助他们开始开发专业质量的C语言代码。另一方面,本书将迅速教会你如何开发正确的、可移植的、专业质量的代码,为开发安全关键型和安全关键型系统打下基础,也许还能教你一两件连你组织中的高级开发人员都不知道的事情。
Effective C: An Introduction to Professional C Programming是对基本C语言编程的简明介绍,它将使你很快编写程序,解决问题,并建立工作系统。书中的代码例子都是习以为常、直截了当的。
在本书中,你将学习到C语言的基本编程概念,并通过每个主题的练习来练习编写高质量的代码。你还会了解到开发正确、安全的C语言代码的良好软件工程实践。请到本书的页面https://www.nostarch.com/effective_c/,或到http://www.robertseacord.com/,我们将提供更新和补充材料。如果你在完成本书后有兴趣学习更多关于C、C++或其他语言的安全编码,请查看通过NCC集团提供的培训课程:https://www.nccgroup.trust/us/our-services/cyber-security/security-training/secure-coding/。

参考资料

https://url97.ctfile.com/f/18113597-810419181-1f9306 下载密码 订阅号pythontesting 发送 密码 。

本书的内容

第1章:C语言入门 你将编写一个简单的C语言程序,以熟悉使用主函数。你还会看一下编辑器和编译器的一些选项。
第2章:对象、函数和类型 本章探讨了诸如声明变量和函数等基础知识。你还会研究使用基本类型的原则。
第3章:算术类型 你将了解两种算术数据类型:整数和浮点类型。
第4章:表达式和运算符 你将学习运算符以及如何编写简单的表达式来对各种对象类型进行操作。
第5章:控制流 你将学习如何控制各个语句的评估顺序。我们将首先讨论定义要执行的工作的表达式语句和复合语句。然后,我们将介绍三种决定哪些代码块被执行,以及执行顺序的语句:选择、迭代和跳转语句。
第6章:动态分配的内存 你将了解到动态分配的内存,它是在运行时从堆中分配的。当程序的确切存储需求在运行前未知时,动态分配的内存非常有用。
第7章:字符和字符串 你将学习各种字符集,包括ASCII和Unicode,它们可以用来组成字符串。你将学习如何使用C标准库中的传统函数、边界检查接口以及POSIX和Windows API来表示和操作字符串。
第8章:输入/输出 本章将教你如何执行输入/输出(I/O)操作,从终端和文件系统中读取数据或向其写入数据。I/O涉及到信息进入或退出程序的所有方式,没有这些方式,你的程序将是无用的。我们将介绍利用C标准流和POSIX文件描述符的技术。
第9章:预处理器 你将学习如何使用预处理器来包含文件,定义类似对象和函数的宏,以及根据实现的特定特征有条件地包含代码。
第10章:程序结构 你将学习如何将你的程序结构成由源文件和包含文件组成的多个翻译单元。你还将学习如何将多个对象文件连接起来,以创建库和可执行文件。
第11章:调试、测试和分析 本章介绍了产生正确程序的工具和技术,包括编译时和运行时断言、调试、测试、静态分析和动态分析。本章还讨论了在软件开发过程的不同阶段推荐使用哪些编译器标志。

posted @ 2023-05-10 10:06  磁石空杯  阅读(81)  评论(0编辑  收藏  举报