2020年面向对象程序设计寒假作业1_问答题

问答题:

1.如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。

(1) 运算符众多,且分为若干优先级,不易记忆,很容易因为混淆而导致出现错误;

(2) 使用数组时常常要考虑是否越界的问题,如果不考虑,就容易越界导致出错;

(3) 存在一些语法限制,如switch语句由case结构组成,每个case结束之后都要使用一个break来跳出case结构,否则将会继续执行下面的case,这样就会造成错误;

(4) 一些错误不易发现,如“=”和“==”,两者都是合法运算符,有时候手误打错,但编译并不会出错,导致找不到这个错误,耗大量时间一行行去看才能纠正。

2.查阅相关资料,简述一下C语言/C++的编译过程。

C/C++程序编译流程: 预处理->编译->汇编->链接

具体的就是: 源代码(source coprede)→预处理器(processor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→链接器
(Linker)→可执行程序(executables)

1. 预处理
预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。

(1)读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理;
(2)删除所有的注释;
(3)添加行号和文件名标识;
(4)保留所有的#pragma编译器指令。

2. 编译
将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。

3. 汇编
将编译完的汇编代码文件翻译成机器指令,并生成可重定位目标程序的.o文件,该文件为二进制文件,字节编码是机器指令。

4. 链接
通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。

猜你喜欢

转载自www.cnblogs.com/littleseasalt/p/12236270.html