热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CPrimerPlus第一章初识C语言

第一章初识C语言参考书籍:CPrimerPlus(第6版)中文版一、前言打算跟着本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。二、主要内容1.C语言起源1972年,美

第一章 初识C语言


参考书籍:C Primer Plus(第6版)中文版

一、前言


打算跟着本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。



二、主要内容


1. C语言起源

1972年,美国贝尔实验室的丹尼斯·里奇(Dennis Ritch )和肯·汤普逊(Ken Thompson )在开发UNIX操作系统时设计了C语言,C语言是在B语言(汤普逊发明)的基础上进行设计。


2. C语言优点



  • 高效性:C语言具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序(即根据具体平台)以获得最大运行速度或最有效地使用内存。

  • 可移植性:从8位微处理器到克雷超级计算机,许多计算机体系结构都可以使用C编译器。

  • 面向程序员:程序员利用C可以访问硬件、操控内存中的位。C语言有丰富的运算符,能让程序员简洁地表达自己的意图。C语言在提供更多自由的同时,也让使用者承担了更大的责任。


3. C语言缺点

想拥有自由就必须时刻保持警惕要享受用C语言自由编程的乐趣,就必须承担更多的责任。



  • 特别是,C语言使用指针,而涉及指针的编程错误往往难以察觉。

  • C语言紧凑简洁,结合了大量的运算符。正因如此,我们也可以编写出让人极其费解的代码。


4. C语言应用范围

早在20世纪80年代,C语言就已经成为小型计算机(UNIX系统)使用的主流语言。从那以后,C语言的应用范围扩展到微型机(个人计算机)和大型机(庞然大物)。

特别是,C语言已成为嵌入式系统编程的流行语言。也就是说,越来越多的汽车、照相机、DVD播放机和其他现代化设备的微处理器都用C语言进行编程。

C++在C语言的基础上嫁接了面向对象编程工具(面向对象编程 是一门哲学,它通过对语言建模来适应问题,而不是对问题建模以适应语言


5. 计算机能做什么

现代的计算机由多种部件构成。中央处理单元 (CPU)承担绝大部分的运算工作。随机存取内存 (RAM)是存储程序和文件的工作区;而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前储存的程序和文件。

CPU的工作非常简单,至少从以下简短的描述中看是这样。它从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令。

CPU有自己的小工作区—— 由若干个寄存器 组成,每个寄存器都可以储存一个数字。一个寄存器储存下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中储存该指令,并更新第1个寄存器储存下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫作指令集 )。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。例如,从内存移动到寄存器。


6. 高级计算机语言和编译器

高级编程语言(如,C)以多种方式简化了编程工作。使用高级编程语言,可以在更抽象的层面表达你的想法,不用考虑CPU在完成任务时具体需要哪些步骤。

编译器是把高级语言程序翻译成计算机能理解的机器语言指令集的程序。


7. C 语言标准



  • C89/C90/ANSI C



    • 美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。

    • ANSI/ISO标准的最终版本通常叫作C89 (因为ANSI于1989年批准该标准)或C90 (因为ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用ANSI C。

    在该委员会制定的指导原则中,最有趣的可能是:保持C的精神。委员会在表述这一精神时列出了以下几点:




    • 信任程序员;

    • 不要妨碍程序员做需要做的事;

    • 保持语言精练简单;

    • 只提供一种方法执行一项操作;

    • 让程序运行更快,即使不能保证其可移植性。




  • C99



    • 1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。

    • 第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。

    • 第2个目标是,“调整现有实践致力于解决明显的缺陷”。

    • 第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。



  • C11



    • 标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。

    • 出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。

    • 而且,供应商并未像对C90那样很好地接受和支持C99。这使得C99的一些特性成为C11的可选项。




8. 使用C语言的7个步骤

C是编译型语言。编写C程序的过程通常有7个步骤(也是比较通用的程序设计步骤)。

编程的7个步骤



  • 定义程序的目标

    • 想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。



  • 设计程序

    • 虑如何用程序来完成任务。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准备花多长时间来完成这个程序?

    • 还要决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。

    • 通常,选择一个合适的方式表示信息可以更容易地设计程序和处理数据。



  • 编写代码

    • 把你设计的程序翻译成C语言。

    • 一般而言,使用文本编辑器创建源代码 文件。该文件中内容就是你翻译的C语言代码。



  • 编译

    • 编译器是把源代码转换成可执行代码的程序。C编译器负责把C代码翻译成特定的机器语言。

    • C编译器还将源代码与C库的代码合并成最终的程序(更精确地说,应该是由一个被称为链接器的程序来链接库函数,但是在大多数系统中,编译器运行链接器)。其结果是,生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。

    • 编译器还会检查C语言程序是否有效。如果C编译器发现错误,就不生成可执行文件并报错。



  • 运行程序

  • 测试和调试程序

  • 维护和修改代码

  • 说明

    • 编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往复。

    • 许多初学者经常忽略第1步和第2步(定义程序目标和设计程序),直接跳到第3步(编写代码)。那些跳过前两个步骤的人往往浪费了更多的时间,因为他们写出的程序难看、缺乏条理、让人难以理解。要编写的程序越大越复杂,事先定义和设计程序环节的工作量就越大。

    • 磨刀不误砍柴工,应该养成先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、条理清晰。




9. 编程机制

用C语言编写程序时,编写的内容被储存在文本文件中,该文件被称为源代码文件 (source code file )。大部分C系统,包括之前提到的,都要求文件名以.c结尾(如,wordcount.cbudget.c )。在文件名中,点号(.)前面的部分称为基本名 (basename ),点号后面的部分称为扩展名 (extension )。



  • 目标代码文件

    • C编译器把源代码转换为机器语言代码,并把结果放在目标代码文件 (或简称目标文件 )中。



  • 启动代码

    • 启动代码(startup code)充当着程序和操作系统之间的接口。



  • 库函数

    • 几乎所有的C程序都要使用C标准库中的函数。



编译器和链接器

链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。

简而言之,目标文件和可执行文件都由机器语言指令组成的。然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码。


10. 本章小结

C是强大而简洁的编程语言。它之所以流行,在于自身提供大量的实用编程工具,能很好地控制硬件。而且,与大多数其他程序相比,C程序更容易从一个系统移植到另一个系统。

C是编译型语言。C编译器和链接器是把C语言源代码转换成可执行代码的程序。

用C语言编程可能费力、困难,让你感到沮丧,但是它也可以激发你的兴趣,让你兴奋、满意。我们希望你在愉快的学习过程中爱上C。



推荐阅读
  • 在C语言中,常用的字符和字符串处理函数对于程序开发至关重要。这些函数定义在标准库中,如`stddef.h`中的`size_t`表示无符号整数。本文详细解析了字符和字符串处理函数的应用,特别是查找功能的相关实现。通过具体示例,展示了如何高效地使用这些函数进行字符串操作和字符处理,为开发者提供了实用的参考。 ... [详细]
  • 拥有400多C币却无处使用,确实令人头疼。建议社区可以考虑增加C币的使用场景,例如允许用户用C币兑换积分或其他实用资源,从而提高C币的流通性和用户满意度。同时,欢迎大家分享自己的C币消费策略和经验,帮助更多用户合理利用手中的C币。 ... [详细]
  • 具备括号和分数功能的高级四则运算计算器
    本研究基于C语言开发了一款支持括号和分数运算的高级四则运算计算器。该计算器通过模拟手算过程,对每个运算符进行优先级标记,并按优先级从高到低依次执行计算。其中,加减运算的优先级最低,为0。此外,该计算器还支持复杂的分数运算,能够处理包含括号的表达式,提高了计算的准确性和灵活性。 ... [详细]
  • 在人工智能的计算与理论中,掌握扎实的数学基础至关重要。本文回顾并总结了矩阵运算的基本原理和规则,旨在帮助读者在学习AI时更好地理解相关的数学概念,并详细探讨了如何在C语言中实现这些矩阵运算的方法。 ... [详细]
  • 无论是计算机专业学生还是非计算机专业的学习者,在掌握C语言的过程中可能会遇到诸多挑战,不清楚从何入手。为此,本文系统地梳理了2019年福建省C语言的核心知识点,并结合最新的技术进展进行了详细总结,旨在为初学者提供全面的学习指导。文章不仅涵盖了基础语法和数据结构,还深入探讨了指针、内存管理和算法优化等高级主题,帮助读者快速提升编程能力。 ... [详细]
  • 深入解析C语言中的动态规划算法:以背包问题为例
    本文深入探讨了C语言中动态规划算法的应用,以经典的背包问题为例进行详细解析。通过实例分析,展示了如何利用动态规划解决复杂优化问题,并提供了高效的代码实现方法。文章不仅涵盖了算法的基本原理,还讨论了其在实际编程中的应用技巧和优化策略,为读者提供了全面的理解和实践指导。 ... [详细]
  • 在Java编程中,利用Scanner类可以有效地接收和处理用户输入。本文介绍了Scanner类的基本概念及其使用方法,重点讲解了三种常用的输入方式,并提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一功能。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 软考C语言历年真题精解与详细答案解析 ... [详细]
  • C语言编程中常见的C2143和C2059语法错误解析:缺少分号与星号位置不当 ... [详细]
  • C语言中fprintf函数写入文件出现空白问题及解决方法
    C语言中fprintf函数写入文件出现空白问题及解决方法 ... [详细]
  • 深入解析 Java UTC 时间处理技术与应用 ... [详细]
  • 如何在Lua中调用C语言编译的动态链接库
    本文介绍了如何在Lua中调用C语言编译的动态链接库。通过详细步骤和示例代码,帮助开发者理解和掌握这一技术。参考了《Lua编程入门》一书中的相关内容,并结合实际操作经验,提供了更加清晰和实用的指导。此外,还探讨了在不同操作系统下编译和链接Lua的方法,为跨平台开发提供了有价值的参考。 ... [详细]
  • 本文详细解析了高性能通信库 NanoMsg 的框架及其应用场景。其中,BUS模式支持多对多的简单通信方式,消息会传递给所有直接连接的节点。REQREP模式则适用于构建无状态的服务集群,用于处理用户的请求,每个请求都需要一个相应的响应。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
author-avatar
陈柏菱皇君怡惠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有