C语言编程技术的优势和劣势

C语言编程技术的优势和劣势,第1张

随着互联网编程技术的不断发展,现在大多数的软件开发都是通过编程语言来实现的,今天我们就一起来了解一下C语言编程开发技术都有哪些优势和劣势。

C语言的一些好的体验

一次通过阅读POV-Ray源代码学会如何在C语言中实现面向对象编程。

通过阅读GTK+源代码了解C语言代码的清晰、干净和可维护性。

通过阅读SIOD和Guile的源代码,知道如何使用C语言实现Scheme解析器。

使用C语言写出GNOMEEye的初始版本,并对MicroTile渲染进行调优。

C语言的一些不好的体验

在Evolution团队时,很多东西老是崩溃。那个时候还没有Valgrind,为了得到Purify这个软件,需要购买一台Solaris机器。

调试gnome-vfs线程死锁问题。

调试Mesa,却无果。

接手Nautilus-share的初始版本,却发现代码里面居然没有使用free()。

想要重构代码,却不知道该如何管理好内存。

想要打包代码,却发现到处是全局变量,而且没有静态函数。

但不管怎样,还是来说说那些Rust里有但C语言里没有的东西吧。

自动资源管理

Rust从C++那里借鉴了一些想法,如RAII(ResourceAcquisitionIsInitialization,资源获取即初始化)和智能指针,并加入了值的单一所有权原则,还提供了自动化的决策性资源管理机制。

自动化:不需要手动调用free()。内存使用完后会自动释放,文件使用完后会自动关闭,互斥锁在作用域之外会自动释放。如果要封装外部资源,基本上只要实现Drop这个trait就可以了。封装过的资源就像是编程语言的一部分,因为你不需要去管理它的生命周期。

决策性:资源被创建(内存分配、初始化、打开文件等),然后在作用域之外被销毁。根本不存在垃圾收集这回事:代码执行完就都结束了。程序数据的生命周期看起来就像是函数调用树。

如果在写代码时老是忘记调用这些方法(free/close/destroy),或者发现以前写的代码已经忘记调用,甚至错误地调用,那么以后我再也不想使用这些方法了。

泛型

Vec真的就是元素T的vector,而不只是对象指针的数组。在经过编译之后,它只能用来存放类型T的对象。

在C语言里需要些很多代码才能实现类似的功能,所以我不想再这么干了。

trait不只是interface

Rust并不是一门类似那样的面向对象编程语言,它有trait,看起来就像是里的interface——可以用来实现动态绑定。如果一个对象实现了Drawable,那么就可以肯定该对象带有draw()方法。

不过不管怎样,trait的威力可不止这些。

依赖管理

以前实现依赖管理需要:

手动调用或通过自动化工具宏来调用g-config。

指定头文件和库文件路径。

基本上需要人为确保安装了正确版本的库文件。

而在Rust里,只需要编写一个Cargotoml文件,然后在文件里指明依赖库的版本。这些依赖库会被自动下载下来,或者从某个指定的地方获取。

测试

C语言的单元测试非常困难,原因如下:

内部函数通常都是静态的。也就是说,它们无法被外部文件调用。测试程序需要使用#include指令把源文件包含进来,或者使用#ifdefs在测试过程中移除这些静态函数。

需要编写Makefile文件将测试程序链接到其中的部分依赖库或部分代码。

需要使用测试框架,并把测试用例注册到框架上,还要学会如何使用这些框架。

卫生宏(HygienicMacro)

Rust的卫生宏避免了C语言宏可能存在的问题,比如宏中的一些东西会掩盖掉代码里的标识符。Rust并不要求宏中所有的符号都必须使用括号,比如max(5+3,4)。

没有自动转型

在C语言里,沙河北大青鸟发现很多bug都是因为在无意中将int转成short或char而导致,而在Rust里就不会出现这种情况,因为它要求显示转型。

不会出现整型溢出

这个就不用再多作解释了。

你说的是对的,函数运行在栈上局部对象也创建在栈上,函数结束也就是栈退出时局部对象会自动调用析构函数,如果是new的对象那么是在堆上的就不会自动析构需要调用delete。

另外即使是堆上的对象经过特殊封装也可以让它自动释放,所谓的auto_release

呵呵,你说的是万能驱动把,在封装之前先把你自己电脑的驱动清理干净,不然部署到别人的机器会蓝屏的!!你说的那个软件我们一般用的是自由天空的万能驱动!!在解压驱动前会检测你的硬件,然后再进行相应驱动的安装!!!

是GetDC需要调用ReleaseDC。

不过如果是在窗口上绘制的话,我更愿意使用

CClientDC dc(CWnd);

获得CWnd窗口的客户DC,这是MFC为窗口客户区专门封装的DC。

还有一个好处就是,这种方式得到的CDC,可以自动释放

封装前的准备1、集成系统补丁。集成补丁的方法有很多,例如使用Windows Update、使用第三方安全软件、使用第三方补丁包等。这里推荐大家选用IT天空系统补丁安装助理,一次性安装所有重要补丁。2、安装常用软件。常用软件常用的一般也就几种,大家请根据自己的系统部署范围而决定。特别提醒(1)不是所有的软件都能良好适应系统封装部署,特别是某些国产软件;(2)需要激活的软件,部署完毕后一般都需要重新激活;(3)不建议集成安全类软件,某些安全软件会阻挡正常的系统部署进程,甚至导致蓝屏宕机;(4)如果某些软件不适合集成在系统,可以使用首次进桌面静默安装的方法来解决。3、备份系统。又备份系统?对,备份。补丁安装要20分钟左右,软件也需要逐个安装与调整,所以整体时间一般不少于30分钟。为防止封装时出现未知错误,建议再次备份系统,以备今后的调整 *** 作。这次备份完,我们就可以放心大胆的开始封装 *** 作了。第一阶段封装EasySysprep v4 (ES4)与之前ES3、ES2以及传统封装辅助工具最大的不同,在于其将封装分为了两个阶段。第一阶段:以完成封装 *** 作为首要目的;第二阶段:以完成对系统的调整为首要目的。将封装与调整分开,减少调整 *** 作对封装 *** 作的影响,保障封装成功率。1、启动ES42、封装选项设置界面(1)序列号,合法的系统序列号,OEM和VOL系统请在此输入,零售版需要在部署时输入提醒a:VOL(免激活版)并不是免序列号,如果你安装时没需要输入那是因为自动应答文件帮你输入了提醒b:如果序列号不适合当前系统,或系统精简了关于序列号认证的功能,序列号就无法被使用(2)注册用户和注册组织,不能为空,请填写您的相关信息,留空则保持默认(3)时区,请根据您所在时区进行选择(4)安全标识符,如果生成,会拖慢系统部署速度,建议需要加入域的计算机才选中此项(5)网络,工作组或域,请根据您的情况选择,如果是“域”还可以设置接入域的账户和密码(6)服务器授权模式用于Windows Server 2003,非用于XP(7)清理当前计算机即插即用驱动,强烈建议选中,将自动卸载当前驱动(8)释放当前系统自带的基础硬件驱动,强烈建议选中,将所有基础硬件驱动释放入系统,可提高部署时对基础设备的兼容性(9)移动当前桌面快捷方式到公共桌面,可将当前用户桌面快捷方式应用给所有用户,但会影响当前快捷方式的位置3、封装前的预览4、开始封装ES4的第一阶段封装只涉及封装所必须的 *** 作,所以 *** 作较少,更多的调整 *** 作留给了第二阶段。第二阶段封装EasySysprep v4(ES4)的第二阶段封装于PE环境下完成,而非常规的系统桌面环境。第二阶段的重点在于:调整系统配置。PE下完成系统调整的优势,优势有三:(1)其实这时系统封装必要的 *** 作已经结束了,要调整的是封装后的系统,不必担心调整对封装成功率产生影响;(2)不必过多考虑系统权限对系统调整所产生的影响;(3)一旦有某些调整产生失误,无需重新封装系统,再次调整即可。1、备份第一阶段封装完毕的系统,以备不时之需2、启动ES43、OEM信息设置功能:(1)注册用户、注册组织,一般而言会自动读取第一阶段所设置的值,可再次修改,但不可为空(2)制造商、电脑型号,请根据实际情况填写(3)OEM,180x114bmp格式(4)开始菜单链接,请根据实际情况填写(5)支持信息,请根据实际情况填写说明:(1)如果制造商、电脑型号和支持信息同属oeminfoini,若制造商、电脑型号不填写,则oeminfoini不完整,支持信息将无法生效,特请注意!(2)如果不想使用OEM,单击清除按钮,保持路径为空即可(3)如果不想使用开始菜单链接,将链接名称设置为空即可4、注册表优化设置功能:(1)默认提供一套注册表优化方案,可单击浏览按钮导入自定义方案(2)最终注册表优化方案以文本框中的内容为准(3)可手动删除不需要的项目,亦可手动添加需要的项目5、服务优化功能:(1)将枚举目标系统所有服务描述名和服务名称,可设置服务的状态(自动、手动、禁用)(2)与ES3不同的是,不显示服务描述,此问题暂未得到良好解决,后续会逐步跟进修正6、系统设置功能:(1)开关机音乐,可协助替换开关机声音,wav格式,不宜过大过长,请自备(2)系统页面,可协助调换系统属性面板和登录页面程序,请自备(3)虚拟内存,可设置系统默认和自定义两种模式,自定义模式下还可设置页面文件位置、页面文件大小(4)计算机名,包括完全随机、完全固定、[日期]-[时间]、[前缀]-[日期][时间]四种模式(5)SFC,可设置关闭或开启SFC,开启SFC状态时可选是否自动恢复DllCache文件(6)其他破解,获取更多的连接数或支持更多第三方主题说明:(1)计算机名 [日期]-[时间] 模式,命名后形如:20130122-151922(2)计算机名 [前缀]-[日期][时间] 模式,命名后形如:SKY-20130122ITK,前缀最长5字母(3)建议关闭SFC,不再使用,SFC属于鸡肋的系统防护功能,可轻易被恶意程序绕过,禁用还可提高系统反应速度7、部署设置功能:(1)序列号,一般会读取在第一阶段中设置的序列号,如需更改可改动(2)时区,一般会读取在第一阶段中设置的时区,如需更改可改动(3)显示设置,可设置部署分辨率和进桌面的分辨率(4)使用硬件抽象层(HAL)自动判定,自动判定目标计算机HAL,避免电源管理故障(5)接管部署流程,接管后可以实现更多部署功能,如部署前后接口等(6)使用部署插件,如部署侧边栏、部署进度条(7)部署背景,可设置单背景模式或多背景切换模式(8)Boot时间设定,可设定封装后和部署后的Boot时间(9)清理目标系统中的即插即用驱动,对系统中的PNP驱动进行清理(应急与测试类功能,慎用)(10)清理目标系统中的磁盘控制器驱动,对系统中的IAR驱动进行清理(应急与测试类功能,慎用)(11)清理目标系统中的补丁备份和卸载程序,清理安装补丁留下的补丁备份和补丁卸载程序,可减少系统映像体积(12)清理目标系统中的临时文件和系统日志,可进一步清理目标系统中的残留文件说明:(1)不建议手动指定部署分辨率,保持系统默认为最好。另外,设置部署分辨率可能会影响进桌面分辨率的设置(2)不建议手动指定进桌面分辨率,部署中调用万能驱动助理安装驱动后,进桌面时即为最佳分辨率(3)HAL自动判定非常重要(ES3中默认启用),可以避免因电源管理故障引起的不能正常关机问题(4)HAL自动判定所需的Longhorn的NTLDR,比XP的NTLDR拥有更好的兼容性,可承担大量IAR驱动的启动负担(5)接管部署流程建议使用(ES3中默认启用),可拓展更多部署功能(6)有些PS过的不符合系统公共标准,若无法被背景程序显示,可用Windows自带画图工具另存一下(7)清理PNP和IAR驱动的选项不建议选中,这两个功能仅用于在目标系统“不干净”的条件下应急8、网络设置功能:(1)网络设置,可选择手动指定和DHCP两种模式,请根据需要选择与设定(2)网络环境,可设置工作组或域信息,一般会读取第一步骤设置的值,如需更改可设置(3)服务器授权模式用于 Windows Server 2003(4)局域网共享设置,提供了三种不同的认证方法,请根据需要选择与设定说明:(1)IP地址设置中,可用“”代替2~254之间的随机值(2)IP设置功能ES4采用了全新的方法,设置速度快于ES3数倍(3)提供全国主要省市联通、电信DNS,并提供两组通用DNS备用(4)可设置本地连接是否显示于任务栏,以及显示规则。9、特殊调用接口功能:(1)特殊调用接口一般为特定的应用程序或功能保留(2)万能驱动助理调用接口,为IT天空万能驱动助理专门保留,可设置部署中/进桌面调用(3)万能驱动助理调用接口附带首次进桌面d任务管理器和删除解压驱动的功能(4)快速配置工具,可设置进桌面调用IT天空快速配置工具进行快速系统设置(5)综合运行库,为IT天空一键运行库的专用接口,可设置部署中/进桌面调用(6)其他类功能见UI说明10、通用调用接口功能:(1)调用exe、bat、cmd运行,可设置运行参数,可设置隐藏和不等待(2)调用reg文件自动静默导入(3)删除指定文件(4)删除指定目录(5)任务设置后,选择调用时机,单击“添加”按钮添加任务到列表(6)选中任务,单击“删除”按钮可删除任务,单击“编辑”按钮可调整任务(7)选中任务,单击“上移”或“下移”按钮,可移动任务执行顺序(8)“整理”功能将自动将任务按调用时机排序,第二阶段封装任务开始前也会自动整理说明:(1)当所调用程序位于系统盘时,盘符自动转换为%systemdrive%(2)当所调用程序位于非系统盘时,盘符会自动转换为%x%,部署时自动搜索所有盘符寻找指定程序(3)亦可使用%CDRom%和%UDisk%指代光驱和U盘,部署时将只搜索指定设备寻找指定程序(4)如果隐藏运行程序,且程序卡住了,那么将没有任何提示,慎用此功能(5)如果启用了不等待模式,将不等待当前程序的执行结束即会开始下一个程序的执行,这是一种非常不好的状态,仅用于特殊应用程序的调用,不要随意使用,本功能亦不会加快程序执行效率或缩短部署过程,相反会带来一堆问题盘符自动转为%x%示例:盘符自动转为%systemdrive%示例:删除文件任务示例:删除目录任务示例:11、磁盘控制器驱动说明:(1)IAR驱动列表与最新的SKYIAR稳定版一致(2)提供成套的、具有广泛兼容性的IAR驱动方案,建议使用(3)如有需求,可手动选中仅需要的IAR驱动,IAR驱动间若存在冲突,程序会自动提醒(4)IAR驱动方案并不是选中所有,而是选中最具兼容性的驱动组合12、保存设置信息总览,如未发现问题,单击“完成”按钮开始执行所有调整工作13、备份系统为系统映像,注意选择最大压缩率大功告成,可以测试映像的部署了!系统部署经刚才封装的系统映像部署一下看看效果:1、最小化系统安装(MiniSetup)2、注册组件时自动安装所需运行库(1)自动安装 DirextX 90c(2)自动安装VC++2005/2008/2010等运行库3、自动执行万能驱动助理(1)检测硬件(2)解压并安装驱动4、进入系统,补丁、软件、运行库、驱动全齐! 关于运行库的安装时机有些朋友喜欢在封装前即将DX9、VC++等运行库安装好,这样做便于减少系统部署时间。而有些朋友喜欢在部署时安装DX9、VC++等运行库,这样有助于减少映像体积,并便于更新。两种方法都是正确的,上述过程是在部署中进行运行库安装的,请根据自己的实际需求选择使用哪种方法。

以上就是关于C语言编程技术的优势和劣势全部的内容,包括:C语言编程技术的优势和劣势、中执行到程序结束自动调用析构函数,栈中必须用delete才能触发析构函数、如何在xp系统中封装驱动显卡网卡等等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10630700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存