这10个C语言技巧让初学者少走180天弯路!

硬件设计师最多见的工做内容是经过写代码来测试硬件。这10个C语言技巧(C语言仍然是常见的选择)能够帮助设计师避免因基础性错误而致使某些缺陷的产生并形成维护方面的困扰。程序员

技巧 1:不要使用“GOTO”语句编程

二十几年前,当计算机编程尚处于起步阶段时,程序流程是由“GOTO”语句来控制。该类语句容许程序员对当前代码行断行,而直接进入另外一个不一样的代码段。列表1为简单的示例。
最后,若是你们若是在自学遇到困难,想找一个C++的学习环境,能够加入咱们的C++学习圈,点击我加入吧,会节约不少时间,减小不少在学习中遇到的难题。编程语言

图片描述
这10个C语言技巧让初学者少走180天弯路!
列表1 使用GOTO语句模块化

编程语言终究开始引入了函数的概念,即容许程序对代码进行断行。若是已经完成,再也不使用goto语句来表示代码的断行。函数调用后,函数将回到下一条指令。列表2为示例。这一作法改善了程序结构,提升了可读性。自此,这被视为编写程序的正确方法。只要看到或想到goto语句,就会让软件工程师退缩,产生本能的厌恶。其中一个主要的缘由是,一个遍及goto语句的程序会让让人很难抓住重心,不便于对程序的理解和维护。函数

这10个C语言技巧让初学者少走180天弯路!
列表2 用函数控制流程学习

技巧 2:使用FOR(;;)或While(1)测试

若是goto语句已通过时,那么对程序建立无限循环应该如何去作呢,这是一些硬件工程师可能会疑惑的问题。毕竟,以前都是经过建立一个goto语句而后再返回到main语句。解决这一问题就要利用C语言中已经存在的循环语句for和while(列表3和4)。优化

这10个C语言技巧让初学者少走180天弯路!
列表3 使用一个无限的For循环编码

这10个C语言技巧让初学者少走180天弯路!
列表4 使用一个无限的While循环spa

列表中的循环条件相对比较简单。for循环无非是以无条件状况使用条件语句。而另外一方面,while循环是语句为真即予执行,这等同对任何条件的非零值。

技巧 3:使用合适的条件语句

除代码的可读性以外,程序的执行时间还主要依赖于作决定时所选择的条件结构类型。许多硬件工程师都熟悉简单的if语句的使用。然而,有时工程师可能没有意识到,若是第一个条件不正确,还可使用else或else if语句。这能够节省处理器时间,而没必要评估另外一个条件语句。在列表5所示的前半部分代码中,若是Var值为1,则代码仍会查看Var是否为0。而在用了else语句的后半部分代码中,只评估第一个语句,以后就继续走下面的代码,这样就节省了时钟周期,使代码更加清晰。

这10个C语言技巧让初学者少走180天弯路!
列表5 用If/Else替代只用If

If/else if/else语句可能并不永远适用。若是须要检查若干个可能的条件,switch语句可能更合适。这样,处理器能够评估语句,而后从一个答案列表中选择下一步动做,而不用连续地评估一堆条件。列表6显示的例子与列表5示例的类型相同。

这10个C语言技巧让初学者少走180天弯路!
列表6 使用Switch语句

以上示例的寓意是,让条件语句的选择更开放,以选择出最适合的语句。这种作法使程序结构更简单,便于理解程序流程,缩短处理器的额外时钟周期。

技巧 4:避免使用汇编语言

微处理器的天然语言为汇编语言指令。为低级别机器语言编程可能会为处理器提供更高效的代码。然而,人类并非天生就会这种语言,而且经验代表,编写汇编语言会形成误解。误解会致使维护不当,更甚者,可能会使系统处处是bug。通常建议避免使用汇编语言。实际上,如今大多数编译器都能编译出很是高效的代码。采用C语言或C++语言等高级语言的开发,能得到更有序的结构,便于理解和维护,使代码的总体效果更好。列表7给出了一个示例,比较了使一个32位变量递增所使用的汇编代码和C语言代码。

这10个C语言技巧让初学者少走180天弯路!
列表7 用汇编和C语言完成一个变量的递增

汇编C代码

固然,如今仍有一些场合适于使用汇编语言,但这种场合仍比较少。首个推荐的场合是开发引导装载程序。这种状况下,可能须要优化对启动过程当中某个决策(启动应用或引导加载器)的速度。此时,分支断定用汇编代码就可能有意义了。另外一种场合是开发一种在DSP上运行有严格时序要求的控制循环。为了从设备中的获得每一个时钟周期,用汇编语言作控制循环的编码是有意义的。若是目前任务适合用汇编,应确保将其妥善存档便于有据可查,这样,将来的开发者(或将来的版本)会明白该代码的用途。

技巧 5:充分利用模块化

笔者最多见的经历是着手由硬件工程师开启的一个新项目每每是杂乱无章的代码组织。一般咱们会发现,代码由一个单一的主模块组成,其中有2.5万多行代码。在这些应用中,一切都是全局性的,函数寥寥无几,goto语句贯穿整个代码结构。15年前这算正常,但现在已再也不适用了!C语言编程使工程师可以将代码分红独立的功能模块,这简化了代码导航,同时还可以使工程师使用封装等面向对象技术。代码能够被组织成逻辑模块,这颇有意义。虽然可能要先花点时间(几分钟),但从长远来看,这将能省掉不少漫长之夜,和不少调试之苦!

技巧 6:写千层饼式代码而非面条式代码

Beningo是一个意大利名字,和许多意大利人同样,我对意大利面食也是毫无保留地热爱。当拿意大利面食与软件相比时,我就会想到两种面食,即意大利面条和千层饼。意大利面条比较混乱,面条相互交织,纵横交错,结果彻底没有任何类型的结构。编写非结构化代码就很是像意大利面条:咬一口,彻底不知道吃的是哪部分。

另外一种就是意大利千层饼!这种面食是分层的,是有结构的。分层开发的代码不只更容易理解,还能够移走一层并添加一个新层,基本上可以实现重复使用和维护的简易性。图1为用千层饼式代码模型的一个简单软件模块示例。

这10个C语言技巧让初学者少走180天弯路!
图1 千层饼软件模型

驱动程序配置

应用程序配置

应用程序

驱动程序库

硬件

技巧 7:使用描述式变量名称

编写易于理解和维护的较大软件有许多障碍,其中之一就是变量的命名习惯。为了尽力缩短变量名,开发者一般会自创一些较短的、使人费解的助记符,每每只有他们本身才能明白的符号。现代语言使一个变量名能够包含数百个字符。为了让事情清晰明确,“直截了当”地方法要好于其它方式。所以,变量名一目了然不只有利于开发人员,也有利于将来的维护团队。列表8给出一个示例。

这10个C语言技巧让初学者少走180天弯路!
列表8 变量的命名

技巧 8:少用#pragma语句

C语言中有一种特殊的#pragma语句。这些语句一般处理非标准的句法和特性,应尽量避免使用这种语句,由于它们是非标准的,不能从一个处理器移植到另外一个处理器。有些编译器可能要求用这类语句完成某项任务,例如定义一个中断服务程序。在这种状况下,可能除了使用#pragma语句之外别无它法。若是可能,将全部的#pragma语句放在一个模块或几个模块里。这有助于确保在代码移植时,只须要更新几处代码,而非整个代码库;此外,这也将有助于防止移植代码的首次编译所带来的困扰。

技巧 9:错误每每并非看上去那样简单

在调试一个C程序时,有一个让人小心的陷阱就是编译器错误。因为编译器的复杂性,当检测到一个错误时,一般错误位于程序中的其它地方,而非编译器所指示的位置。这主要与编译器生成程序的步骤有关。错误类型一般是一致的,工程师能够发现的一些错误中,90%都是根源:

•小心漏掉#include文件。这可能会使程序开发人员看到完美的代码行,但因为未包含必要的头文件,编译器便会将其标志为一个错误,表示有些东西未定义。

•小心漏掉分号。编写C代码时最多见的错误是忘记在句末加分号。

•小心漏掉括号。漏写括号是代码编写过程当中又一常犯的错误,或是粗心漏掉,或是因为键入错误而产生一个错误字符。

•小心漏掉逗号。在复杂的定义中很容易忘记逗号!

通常状况下,当弹出一个奇怪的编译错误对话框时,要查看该行前已被编译的内容。颇有可能就是错误所在!它多是出如今一行上面,或中间部分,或在彻底不一样的文件里。

不要放弃!只要具有必定的经验,解决这些疑难问题就会成为一种次日性。

技巧 10:优秀的程序员编写的代码行数不必定少

人们常有这种误解,即认为较通常的程序员而言,一个优秀的程序员每每写较少的代码行就能解决问题。不要卷入这一错误的想法!一个优秀的程序员一般具有思惟缜密、结构清晰的编码基础。变量命名和封装都恰如其分,系统中几乎不用全局变量。函数应保持简短有效。若是代码看起来很混乱,须要多写几行才能使其看上去更清晰,那就不妨多写几行!能够上网查看得到C代码编写最混乱殊荣奖项的代码用做前车可鉴。优秀程序员写的代码简洁、易于理解和维护,代码行数并不是最少(图2)!

这10个C语言技巧让初学者少走180天弯路!学习历来不是一我的的事情,要有个相互监督的伙伴,工做须要学习C/C++或者为了入行、转行学习C/C++的伙伴能够私信回复小编“学习”领取全套免费C/C++学习资料、视频

相关文章
相关标签/搜索