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

这个作业属于哪个课程 2020年面向对象程序设计 (福州大学 - 数学与计算机科学学院)
这个作业要求在哪里 面向对象程序设计寒假作业1
这个作业的目标 1.安装C++开发环境(见附录)
2.完成问答题、实践题及编程题
3.发布博客
作业正文 面向对象程序设计寒假作业1问答题
其他参考文献 《转》简述c语言的优缺点
C语言的优点和缺点
c语言编译过程详解,预处理,编译,汇编,链接(干货满满)
C语言的编译过程

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

答:由于我是开学才接触C语言,并对C++的了解较少(虽然最近在开始看《C++ Primer Plus》),故在此回答第一小题的问题。

(1)头文件中缺少包含一些实际常用的函数(预设函数较少)

首先,在我解答相应编程题的时候一直有一个烦恼,就比如排序吧。虽然我们已经知道如何打关于排序的代码。但是,在每一次使用排序时我们都必须打相应的代码,而并没有相应的函数包含于头文件中,让我们直接去调用。可能你会说,那我们可以编写一个函数到时候去调用即可。但是,在这时候我们仍然要去编写相应函数从而去调用,仍会浪费一些时间。在我这几天学习中,我知道了C++STL库中包含sort函数可以让我们直接调用,我认为这就可以解决我们C语言无法做到的问题,从而更加方便。

(2)C语言使用指针,所涉及指针的编程错误往往难以发觉

关于这一点,我是参考了《C Primer Plus》中的缺点。确实在我使用C语言解决编程问题时,在运用指针方面,常会发现一些小的错误难以发现,就比如在使用指针存地址时,有时候会多用了一个“”造成如“p=&a;”的错误。有句话说的好:想要拥有自由就必须时刻保持警惕。

(3)C语言数据的安全性存在很大缺陷

针对这一点,是我在参考一些博文与资料时得到的结论(参考文献已在提交作业中进行标注)就比如:对于数组的下标越界,未作检查,导致运行其所写程序时的数据溢出错误,有可能导致计算机系统底层的运行崩溃,使数据丢失,造成严重的后果。这是在它的数据封装性上使得C语言数据的安全性存在很大缺陷。这确实,在我们做过的编程题中,就存在数据溢出,我记得那是一题解决密码加密与解密的问题,当我们在比较字母是否为小写字母时,若设变量再加上32后有些变量会造成数据溢出(可能我的表述存在一些问题)从而显示如“\273”等情况,而这也就是我认为C语言数据在运用中存在的安全问题。同时,我在使用gets函数接收字符串,并运行程序后,我使用的Xcode的运行框会弹出这样一段话“warning: this program uses gets(), which is unsafe.”在查阅资料后,我知道了不安全是因为你给了他一个缓冲区,但是你却没有告诉它这个缓冲区到底有多大,也不知道输入的内容到底有多大,输入的内容可能超出缓冲区的结尾,引起你的程序崩溃,使用fgets会好一些,因为你会指定它的缓冲区大小。这也是我认为在使用C语言中体现出来的不安全。

(4)运行时类型检查是不可用

在C语言没有规定运行时类型检查,比如我传递浮点值,而接收参数为整数类型那么值将会被改变,它不会给任何类型的错误信息。

(5)命名空间功能

C不提供的命名空间功能,让你不能够在一个范围内再次使用相同的变量名。如果命名空间功能可用的话,那么你可以能够重复使用相同的变量名。

对于(4)、(5)点我是在借鉴他人博客从而了解到的,具体的链接已贴至作业中。

以上就是我对于C语言缺点的看法,可能存在一些错误,希望大家可以批评指正,同时也希望深入学习C++进一步比较出两者语言中的优缺点,并在今后学习中加以应用。

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

答:C语言编译过程(引用链接已在作业标出):

(1)预处理,展开头文件/宏替换/去掉注释/条件编译

比如:我们常用的“#include<stdio.,h>” 尖括号是预处理到系统规定的路径中去获得这个文件(即 C 编译系统所提供的并存放在指定的子目录下的头文件)。找到文件后,用文件内容替换该语句。
还有常用的“#define”可以替换常量。

(2)编译,检查语法,生成汇编 

预编译程序所要做的工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。可以说,这一步在编译过程中,至关重要(个人意见)。

(3)汇编,汇编代码转换机器码

汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。

(4)链接,链接到一起生成可执行程序

由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来。

猜你喜欢

转载自www.cnblogs.com/lvhang/p/12232503.html