第一章 初始C语言

1. C语言起源

​ 1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。

​ C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,成为使用最为广泛的编程语言。目前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。

​ 二十世纪八十年代,为了避免各开发厂商用的C语言的语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持符合ANSI C的语法。

2. 选择C语言的理由

2.1 设计特性

​ C语言的设计理念让用户能轻松完成自顶向下的规划、结构化编程和模块化设计。因此,用C语言编写的程序更易懂、更可靠。

2.2 高效性

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

2.3 可移植性

​ C语言是移植语言。在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行。

2.4 强大而灵活

​ C语言功能强大且灵活,如UNIX操作系统是用C语言写的。其他的一些语言(FORTRAN、perl、Python、Pascal、BASIC)的编译器和解释器都是C语言编写。

2.5 面向程序员

​ C语言是为了满足程序员的需求而设计的,程序员利用C可以访问硬件、操作内在中的位。C语言有丰富的运算符,能让程序员简洁表达自己的意图。

3. C语言的应用范围

​ 早在20世纪80年代,C语言就有已经成为小型计算机使用的主流语言。从那以后C语言的应用范围扩展到微型机和大型机。C语言是嵌入式系统编程的流行语言,还能从科学编程领域分一杯羹,而且作为开发操作系统的主流语言C在Linux开发中扮演着极其重要的角色。

4.计算机能做什么

中央处理单元(CPU)承担绝大部分的运算工作。随机存取内存(RAM)是存储程序和文件的工作区。而永久内存存储设备(硬盘:机械硬盘和固态硬盘)在关闭计算机后也不会丢失之前存储的程序和文件。还有各种外围设备(键盘、鼠标、触摸屏、显示器)提供人与计算机之间的交互。

5. C语言标准

​ C语言发展之初,并没有所谓的C标准。1978年布莱恩·柯林汉和丹尼斯·里奇合著的(《C语言程序设计》)第1版是公认的C标准。

5.1 第1个ANSI/ISO C标准

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

C精神:

  • 信任程序员;
  • 不要妨碍程序员做需要做的事;
  • 保持语言精练简单;
  • 只提供一种方法执行一项操作;
  • 让程序运行更快,即使不能保证其可移植性。

在1990年,ANSI C标准(带有一些小改动)被国际标准化组织采纳为ISO/IEC 9899:1990,这个版本有时候称为C90。因此,C89C90通常指同一种语言。

5.2 C99标准

​ 1994年 ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标

  • 第一个目标是支持国际化编程
  • 第二个目标是调整现有实践致力于解决明显的缺陷
  • 第三个目标是为适应科学和工程项目中的关键数值计算,提高C的适应性。

5.3 C11标准

​ 标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。此次委员会提出了一些新的指导原则,不在那么强调"信任程序员"目标了。而且C99中的一些特性成为C11的可选项了。

5.4 C18 标准

C18 (也被称为为C17)是于2018年6月发布的ISO/IEC 9899:2018的非正式名称, 也是截止到2020年6月为止最新的C语言编程标准。 它被用来替代C11标准(即ISO/IEC 9899:2011),C18没有引入新的语言特性,只对C11进行了补充和修正。它是C语言的现行标准。

C18标准即将被C2x标准所取代,C2x引入了一些新特性。目前可以确定的是,C2x标准将加入符合IEEE标准的十进制浮点数,这使得计算机能够精确地储存浮点数。

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

  1. 定义程序的目标

    明确想做什么

  2. 设计程序

    如何组织程序,目标用户是谁,花多长时间完成这个程序,程序中如何表示数据,怎么处理数据?

  3. 编写程序

  4. 编译

  5. 运行程序

  6. 测试和调试程序

  7. 维护和修改代码

8. 编程机制

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

  1. cat concrete.c
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. printf("Concrete contains gravel and cement.\n");
  6. return 0;
  7. }

8.1 目标代码文件、可执行文件和库

​ 把源代码文件转换成可执行文件,编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。C使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已经编译的模块。

​ 中间代码文件有多种形式,在这里主要指把源代码转换为机器语言代码,并把结果放在目标代码文件中。这时目标代码文件还缺失启动代码(startup code)启动代码充当着程序和操作系统之间的接口。除启动代码外还缺少库函数,几乎所有的C程序都要使用C标准库中的函数,目标代码文件并不包含该函数的代码。链接器的作用就是把目标代码、系统的标准启动代码和库代码这3部分合并成一个文件。即可执行文件。

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

8.2 GNU编译器集合和LLVM项目

​ GNU项目始于1987年,是一个开发大量免费UNIX软件的集合。GNU编译器也被称为GCC,是该项目的产品之一。

​ LLVM始于伊利诺伊大学的2000份研究项目。它的Clang编译器处理C代码。2021年Clang成为FreeBSD的默认C编译器。

查看GCC版本:

  1. gcc -v

编译时使用不同的C标准

  1. gcc -std=c99 inform.c #调用C99标准
  2. gcc -std=c1x inform.c #调用GCC接受C11之前的草案标准
  3. gcc -std=c11 inform.c #调用GCC接受的C11标准

第一章 初始C语言的更多相关文章

  1. Java 学习笔记 第一章:Java语言开发环境搭建

    第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...

  2. 第一章:Javascript语言核心

    本节是javascript语言的一个快速预览,也是本书的第一部分快速预览. 读此书之前,感谢淘宝技术团队对此javascript核心的翻译,感谢弗拉纳根写出此书.感谢你们无私的分享,仅以此笔记献给你们 ...

  3. 第一章: 初始JVM

    跟很多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试. 因为装逼 但我经过了几年的学习和实战,我发现其实 ...

  4. 《自学C语言》第一章:C语言简介

    这一章主要介绍什么是C语言,以及它的产生.发展历史.如其中所说的计算机术语有不懂的请百度,例如什么是强类型,什么是高级语言. 1.C语言是什么? 答:C语言是一门通用计算机编程语言,应用广泛.C语言的 ...

  5. 第一章 Python程序语言简介

    第一节 Python概述 1. 什么是Python Python是一种 解释型.面向对象.动态数据类型 的高级程序设计语言.由Guido van Rossum与1989年发明,第一个公开发行版本发行于 ...

  6. 《大道至简》第一章读后感--JAVA语言伪代码形式

    import.java.大道至简.*; //一·愚公移山 import.java.愚公移山.*; public class YuGongYiShan { //原始需求:惩山北之塞,出入之迂 //项目沟 ...

  7. 第一章:java语言概述与开发环境

    前言: 1.程序是什么? 程序是对现实世界的数字化模拟! 2.编程语言是工具,程序的作用就是解决问题!  重要的思路! 该知识点能解决什么问题?   1.语言特性:单继承.多接口!       纯面向 ...

  8. 【疯狂Java学习笔记】【第一章:Java语言概述】

    [学习笔记]1.Java与C#的异同:Java与C#的相同之处有很多,它们均摒弃了C++面向对象的多继承.宏定义.全局变量.全局函数.指针等等难以使用的机制,添加进了成熟的机制,如垃圾回收.接口等等. ...

  9. 第一章:Java语言概述与环境开发

    1.计算机高级语言按程序的执行方式可以分为编译型和解释型两种: 2.JAVA程序的执行过程必须经过先编译后解释两个步骤: 3.JAVA语言里负责执行字节码文件的是JAVA虚拟机 (Java Virtu ...

随机推荐

  1. FFT&原根&NTT&MTT

    FFT bilibili 3b1b视频讲解 核心过程: 原根 Definition 若 \(a\) 模 \(m\) 的阶等于 \(\varphi(m)\),则称 \(a\) 为模 \(m\) 的一个原 ...

  2. Setoolkit部署

    禁止使用本文的知识进行违法犯罪活动!!学习这些内容是为了更好的防范钓鱼网站 详见我的github仓库 Setoolkit : Social-Engineer Toolkit(社会工程学工具包) 其作为 ...

  3. UltraSoft - Beta - Scrum Meeting 9

    Date: May 25th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录Scrum Meeting Liuzh 前端 用户忘记密码界面初稿完成 Kkk ...

  4. [对对子队]会议记录4.21(Scrum Meeting12)

    今天已完成的工作 吴昭邦 ​ 工作内容:基本实现改变顺序合成 ​ 相关issue:实现流水线合成系统的逻辑 ​ 相关签入:4.21签入1 梁河览 ​ 工作内容:修改设置界面bug ​ 相关签入:4.2 ...

  5. 零基础入门该如何实现C 语言面向对象编程(很有帮助)

    零基础如果更快更好的入门C语言,如何在枯燥的学习中找到属于自己的兴趣,如果把学习当成一种事务性的那以后的学习将会很难有更深入的进步,如果带着乐趣来完成学习那将越学越有意思这样才会让你有想要更深入学习的 ...

  6. 洛谷 P2120 [ZJOI2007] 仓库建设

    链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\).给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 ...

  7. hdu 5166 Missing number(。。。)

    题意: 有一个排列,但少了两个数.给你少了这两个数的排列.找出是哪两个数. 思路: 看代码,,, 代码: int a[1005]; int main(){ int T; cin>>T; w ...

  8. JAVA笔记3__字符串String类/对象一对一关联

    import java.lang.String; import java.util.Scanner; public class Main { public static void main(Strin ...

  9. Linux的inode与block

    1,inode包含文件的元信息,具体来说有以下内容: 文件的字节数 文件拥有者的User ID 文件的Group ID 文件的读.写.执行权限 文件的时间戳,共有三个:ctime指inode上次文件属 ...

  10. Zabbix 4.4 离线安装 使用mariadb的踩坑,无法停止服务

    先分享一个网站,之前就没注意过有这个网站,不知道是啥时候开放的.里面分享了N多zabbix的模板. https://share.zabbix.com/ 报错如下 Unsupported charset ...