Review Questions

What dose portability mean in the context of programming?

文中讲到的可移植性是什么意思?

  C本身是不涉及具体系统底层操作的高级语言,C源代码由对应系统的编译器编译、链接生成对应系统需要的可执行机器码,所以编写好C语言源代码之后,不需要改动或者很少改动(涉及指定系统的)很少代码,即可在不同操作系统中移植,这就是文中讲到的可移植性。

Expain the difference between a source code file, object code file, and executable file.

阐述源代码文件、目标代码文件、可执行文件之间的差异。

  • 源代码文件是用C语言的语法写成的代码文件,保存了各种逻辑和操作
  • 类文件是将源代码文件编译之后,只包含源代码文件的可执行代码,不包括不同系统的启动代码段、引用外部或标准库的相应代码信息
  • 可执行文件是包含
    1. 源代码编译之后的可执行代码
    2. 源代码中引入的外部、标准库的代码生成的可执行代码
    3. 操作系统相关的启动代码段(startup code)

      这三部分代码的文件,可执行代码是系统相关的,而且可以执行运行。

What are the seven major steps in programming?

编程的7个主要步骤是什么?

  1. [Define the program objectives定义程序目标]

    分析设计需要解决的现实问题,包括需要提供的信息,系统能计算返回的信息、中间需要的步骤等
  2. [Design the program设计程序]

    设计程序的整体架构,包括输入输出数据结构、相关接口等信息
  3. 编写代码实现功能
  4. 编译代码
  5. 执行程序
  6. 测试、调试程序
  7. 维护、调整程序

What does compiler do ?

编译器做什么?

  编译器首先能检查源码代码中有无语法错误或者引用错误的情况,然后将源代码编译成相应的可执行代码片段,预备使用。

编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件。

What does a linker do?

链接器做什么?

  链接器负责将各个源代码的相互引用、对标准库的引用整合到一个可执行文件中,再在可执行文件中添加系统相关的启动代码段,生成一个当前系统可运行的可执行文件。

  当链接器进行链接的时候,首先决定各个目标文件在最终可执行文件里的位置。然后访问所有目标文件的地址重定义表,对其中记录的地址进行重定向(加上一个偏移量,即该编译单元在可执行文件上的起始地址)。

  然后遍历所有目标文件的未解决符号表,并且在所有的导出符号表里查找匹配的符号,并在未解决符号表中所记录的位置上填写实现地址。最后把所有的目标文件的内容写在各自的位置上,再作一些另的工作,就生成一个可执行文件。

C入门语言基础一[可移植性、涉及的三种文件、编程7个步骤、编译器、链接器]的更多相关文章

  1. c语言求回文数的三种算法的描述

    c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...

  2. Java入门 - 语言基础 - 03.基础语法

    原文地址:http://www.work100.net/training/java-basic-syntax.html 更多教程:光束云 - 免费课程 基础语法 序号 文内章节 视频 1 第一个Jav ...

  3. Java入门 - 语言基础 - 16.数组

    原文地址:http://www.work100.net/training/java-array.html 更多教程:光束云 - 免费课程 数组 序号 文内章节 视频 1 概述 2 声明数组变量 3 创 ...

  4. Java入门 - 语言基础 - 22.异常处理

    原文地址:http://www.work100.net/training/java-exception.html 更多教程:光束云 - 免费课程 异常处理 序号 文内章节 视频 1 概述 2 Exce ...

  5. Java基础 if if-else if-else if-else 三种示例

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  6. Python基础之格式化输出的三种方式

    目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...

  7. c语言实现两数交换的三种方法

    实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变 ...

  8. Java入门 - 语言基础 - 01.Java简介

    原文地址:http://www.work100.net/training/java-intro.html 更多教程:光束云 - 免费课程 Java简介 序号 文内章节 视频 1 概述 2 主要特性 3 ...

  9. Java入门 - 语言基础 - 08.运算符

    原文地址:http://www.work100.net/training/java-operator.html 更多教程:光束云 - 免费课程 运算符 序号 文内章节 视频 1 概述 2 算术运算符 ...

随机推荐

  1. native2ascii命令

    native2ascii命令 native2ascii的命令行的命名格式:       native2ascii -[options] [inputfile [outputfile]] 说明:     ...

  2. Eclipse下载GitHub源码

    1. 可以通过Eclipse->File->Import->Project from Git->URI来提取工程   2. 也可以通过打开git仓库视图(Eclipse 自带了 ...

  3. Java的字符串分割的不同实现

    在java中实现字符串的分割相对而言是很简单的.我们一般会采取两中方式.一个是从jdk1.1就开始的StringTokenizer类,另一个是调用split方法进行分割.下面请看代码: import ...

  4. 【Unity Shaders】Diffuse Shading——向Surface Shader添加properties

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  5. infiniDB的论坛

    http://infinidb.co/community 包括了基本的内容. 安装目录?

  6. zookeeper+kafka集群安装之一

    zookeeper+kafka集群安装之一 准备3台虚拟机, 系统是RHEL64服务版. 1) 每台机器配置如下: $ cat /etc/hosts ... # zookeeper hostnames ...

  7. OBJ-C中dispatch_once的用法

    见如下代码: +(GameState*)sharedGameState{ static GameState *sharedInstance; static dispatch_once_t onceTo ...

  8. Xcode中iOS模拟器程序中的plist路径

    Xcode6.4里写了个简单的iOS程序在模拟器中跑. 其中用到了NSUserDefaults来保存属性文件plist,那么这个文件实际路径在哪里呢?在网上搜了一下,发现几种说法(*表示当前用户名): ...

  9. 自定义Interpolator

    nterpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果.那么什么叫做非线性运动的动画效果呢?就是说动画改变的速 ...

  10. 销售行业ERP数据统计分析都有哪些维度?

    场景描述 当前的企业信息化建设主要包括ERP系统.OA系统等.企业希望实现信息系统数据的整合,对企业资源进行分析汇总,方便对企业相关数据的掌控从而便于对业务流程进行及时调整监控. 但是由于系统间数据的 ...