暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
C高级编程:基于模块化设计思想的C语言开发.pdf
528
27页
1次
2023-11-27
25墨值下载
为什么要写这本书
因为工作原因,在算法优化、底层驱动、嵌入式系统设计等方面的软件编程时,一直使用C语言,而且很难有其他“更好”的选择。一方面,工作内容在客观上决定了无法利用更高级语言;另一方
面,相对其他语言,在上述工作领域中持续使用C语言,使得工作效率更高(结合必要的shell脚本)。因此对于那些初入上述工作领域的工程师,我始终推荐C语言。通过本书,希望将个人的开发总结作为
示例,给予新人作为参考。
C语言是一种比较早期的高级语言,其本身是模块化的,这使得通过C语言比较容易实现面向电子、计算、自控系统自身的模块化设计。目前更多的软件设计并非针对电子、计算、自控系统本身,
如,一个企业管理软件、一个网站商城界面等。这些软件设计,是基于应用者的思维,或者说人类正常思维模式而展开的。由此,这类设计使用面向对象语言会非常方便,但却导致过多关注计算机编程
教育,忽视了面向模块化编程方法的讲解。因此,本书将模块化系统设计的个人总结与C语言的讨论融合。希望本书能抛砖引玉,让上述工作领域的读者更好地关注与思考面向系统本身的设计方法。
本书特色
在本书写作的过程中,使用了个人工程代码库中的原型,并尽可能保证这些代码有一定的应用价值。为了在有限的章节尽可能给出一个较为完整的代码集合,因此,章节之间的代码存在一定依赖性,
即,前序代码形成的模块,会被后续章节中所讨论的代码利用。
为了让工程经验欠缺的新人对C语言开发有更好的感性认识,本书在讨论问题和介绍代码中穿插了很多个人观点,这些观点并不是理论,也不一定是行业共识,只是从一个侧面的经验之谈,希望对读
者有参考价值。
读者对象
·电子、自控、计算机等相关专业的高年级本科、研究生
·算法设计与优化工程师
·嵌入式系统开发工程师
·底层、中间件子系统开发工程师
·其他对C语言编程、模块化系统设计感兴趣的人员
如何阅读本书
本书共九章,从C语言自身,一直探讨到(进程)模块之间的共享与通信。前八个章节,更多是工程和具体代码设计的讨论,而最后一个章节则是系统分析与系统设计方法的讨论。对于期望、正在从
事系统整体规划、构架、设计的读者,建议首先了解最后一章内容,而对于欠缺系统分析经验的新进工程师,则建议从第1章开始阅读,同时建议对书稿中的代码进行上机验证,在执行反馈中了解本书的观
点,并进行修正,形成自身工程代码库
勘误和支持
由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,期待能够得到你们的真挚反馈,在技术之路上互勉共进,我的邮箱是zsu_lucky@163.com。
致谢
感谢教育、指导、帮助、支持过我的老师、朋友及家人,使得我能持续多年在所喜爱的技术领域进行工作。
感谢机械工业出版社华章公司的杨福川和高婧雅,始终支持我的写作,是你们的鼓励和帮助引导我顺利完成这本书稿。
最后,特别感谢杨尚丽对本书的文句审核以及赵瑞源对本书代码的验证。
吉星
2016年3
1章 C
本章主要针对那些刚刚离开校园,准备参与基于C语言设计的项目工程,从事C语言程序开发的初级工程师;或已初步学习了C语言的语法知识,可独立编写一些小的C语言程序,但对C语言的设计方法
和特点并未全面掌握的初级程序员。
本章(其实包括本书)会有很多观点与传统教科书的描述内容存在差异。这种差异并不是对已有教科书部分内容的否定,更不是对辛勤的教育工作者们的否定。这种差异来源于教育与实际开发工程所
在的环境差异以及程序设计任务目标的差异。
单纯依靠传统教科书的内容并不能有效支撑实际工程的开发,同时有些从工程开发角度所关注的内容被传统教科书忽略。因此本章从工程实践角度出发,探讨C语言的一些概念、设计内容和方法,以
便初级程序员对C语言及其利用有进一步的了解。而更全面地掌握需要程序员在实际工程开发中逐步地感悟与积累。
本章受篇幅限制,仅仅针对C语言在编译链接、函数、数据类型、指针、预处理操作等几个方面展开讨论。同时这些讨论的内容,大多会出现在本书后续章节的程序设计中,因此也可将本章看作对本
书后续章节讨论内容的铺垫。
本章不会(也不可能)将所有C语言以及关联的内容全部展开,而是希望借助一些举例和讨论,引出相关概念和知识点,便于初级程序员有针对性地查找相关资料以做更深入的了解,本书后续对此类
情况,将简称为“参照相关资料”。相关资料中,至少包含以下4方面内容
·C语言国际标准;
·你所使用编译器的产品手册
·你所使用编译器的基础库手册;
·你所使用操作系统提供的C语言接口库手册。
注意 以上四方面,一切以C语言国际标准为基准。或许3~5年的一个C语言应用阶段,你一直使用同一个编译器针对同一个目标操作系统进行开发,但你不能保证在随后10年、20年的开发工作中所
用的编译器和针对的目标操作系统始终不变。对于有出入的内容,需要非常注意,在系统原型设计阶段,尽可能地回避编译器的特性。在系统优化阶段,再针对特定目标系统,借助编译器/操作系统接口库
的特性内容来提升你的程序性能。对不属于C语言标准库的内容,则应尽可能地选择那些符合国际标准的协议、规则、规范(如POSIX协议)的部分。
在展开本章讨论之前,围绕C语言的开发,此处给出一些本书作者(本书后续简称“我”)的个人建议。
建议1:
区别于那些“更高级”的计算机编程语言,C语言的设计,从你刚开始入行时就应该有一个意识:“基于C语言的程序开发项目,应当分为系统原型开发阶段和目标平台优化阶段”,前者在利用C语言
本身,后者在发挥特定目标平台的优势。前者关注系统的内在逻辑,后者关注平台的具体特性。但不同的目标平台可能差异较大,如果需要发挥它们的优势,可能存在特定的数据组织策略,这些策略需
在前期阶段进行逻辑验证,因此这两个阶段也不是完全可隔离的。其他“更高级”的语言,并不太关注硬件、平台特性,而C程序员应当多了解目标系统(硬件以及操作系统)的运行机理。
建议2:
C语言的设计开发,尽可能地在类UNIX(UNIX的各种演化版本)或Linux(参照UNIX在PC上实现的操作系统,其不属于类UNIX)下而非Windows平台之上进行,并优先学习这类操作系统及面向这
类操作系统开发的技巧。C语言诞生在UNIX之上,最初的目的又是为了设计UNIX操作系统本身,因此C语言和类UNIX以及Linux具有很好的结合性
相对而言,将Windows下编写带有Windows特性的C语言程序移植到类UNIX或Linux下,其工作量远大于类UNIX或Linux之间的相互移植的工作量,也大于将类UNIX或Linux下开发的C程序移植到
Windows下的工作量。这里也建议那些一线的教育工作者,如同讲解汇编最好结合计算机组成原理一样,教授C语言的知识,最好结合类UNIX或Linux操作系统一并讲解
如果你是一个尚未在类UNIX或Linux下开发的C语言初级程序员,则建议你应尽快熟悉并掌握某个类UNIX以及Linux的操作系统。例如,Mac OS X就是稳定且具有良好应用界面的类UNIX系统。本书
中的所有C语言程序,包括我近年的C语言工程开发均在一台MacBook Pro上完成。而基于Linux内核的操作系统选择也很多,例如,早年我曾在Ubuntu下进行C语言的开发。
建议3:
除特定开发目标(如针对某特定硬件系统所设计的特定开发工具平台),正常的C语言设计应在代码编辑器下编辑,在命令行下调用脚本、make等工具开展工作,而非使用某种无目标系统特性的集成
开发环境(Integrated Development Environment,IDE)。
集成开发环境主要包括编辑器、编译器、调试器和图形用户界面工具等。一些诸如Sublime Text等第三方编辑器的性能优良,比具有同样编辑功能的IDE更为轻巧。而长期使用某种IDE,会逐步忽略了
该环境对C代码组织上的特殊性(对于初学者甚至不了解这些特殊性),这会对以后调整C语言的开发环境有很多不利影响;采用断点、跟踪的调试器并不适用于连续运行下的各种情况跟踪(后续会在第2
章展开讨论);单纯的编译器对于C语言开发并不足够,这需要make和shell脚本等其他工具组成的工具链(后续会在第3章展开讨论)来提高你的工作效率;基于C语言的设计目标极少有针对图形应用界
面的设计,因此图形界面的设计任务使用C语言开发并不适合。
我最初在Turbo C的IDE和visio C++下学习C语言并设计程序,它们易于初学者上手,但“严重”阻碍初学者对C语言工程开发设计方法的掌握及应用。一种较为“偏激”的说法,如果你使用IDE写C
程序,则你仅仅是在写C语言的程序,而不是在利用C语言按照工程化的组织方式开发一个系统。每个团队基于自身的业务背景、设计目标,会使用C语言、脚本等工具去构建和完善自身的工具包,组织成
工具链,帮助自身提高C程序设计的效率。用C语言开发工具服务于C语言的开发,这是C语言程序员应当具备的能力。
建议4:
除非你参与开源项目或希望你的设计目标以开源方式推广,否则更建议初级程序员使用“传统”的版本控制软件。此处“传统”指按照集中化管理的版本控制理论设计所开发出的版本控制软件,典型
的如CVS、SVN、Perforce等。非“传统”的,如目前在各个开源社区中流行的Git。此处并非说后者不好。一个产品,包括未来你所要设计的系统,“好”与“不好”都需要基于具体的应用场景来讨论。
团队内高度协同的开发和基于开源社区(全球化)的开发,在分工组织模式上差异很大。后者极少出现两个程序员针对同一个C文件密集地进行修正调整(这需要以天或半天为单位,相互合并对方最新的
代码),而在团队开发中,这种事情并不少见。我尊敬并赞赏那些为开源软件做出贡献的程序员,但作为初级程序员的你,我更建议你先在集群管控的团队下锻炼好自身的开发能力,再去学习开源系统
设计方法和使用面向开源软件开发的特有工具去参与开源软件的设计
上述4条,仅仅是我个人的建议,既不是“标准”,也不是“守则”,与本书后续针对模块化设计所探讨的“规则”一样,它们只是建议,当然这些建议和规则有效帮助了我个人的开发工作,它们是否
适合你,需要你自己的思考和实践。
1.1 C的编译链接与文件引
1.1.1 一小程
我不知道以下的程序是否算作最简的C语言程序,但它足够小,同时包含了很多初级程序员忽略的内容。代码如下:
int mainint argc char *argv[]{
return argc
}
上述程序存储为C文件前,我们先按照以下命令组织磁盘目录。
mkdir test
cd test
mkdir src
mkdir inc
mkdir obj
mkdir bin
of 27
25墨值下载
c
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜