首页 理论教育 Arduino单片机C语言判断程序设计技巧

Arduino单片机C语言判断程序设计技巧

时间:2023-10-23 理论教育 版权反馈
【摘要】:在Arduino C程序中,程序的起点是名为setup()的函数。因为b小于20,所以表达式逻辑为true,执行if语句块,调用函数doSomethingNeat(),并将其返回值赋给b。如果这是真的,那么必须添加大括号;如果你不知道,你可以试试如下内容:虽然程序员只想在b等于10时调用doSomethingNeat()和doBackupNow(),但编写代码的方式始终调用对doBackupNow()的调用,因为程序员实际编写的是:始终记住,如果没有大括号,if语句块默认为由if测试控制的单个语句。

Arduino单片机C语言判断程序设计技巧

在计算机程序中,除非中央处理器(CPU)被告知不这样做,否则CPU将以从上到下的线性方式处理源代码程序指令。也就是说,程序执行从指定的程序起点开始,并通过从该点到下一条语句的源代码,直到处理完所有语句。

在Arduino C程序中,程序的起点是名为setup()的函数。程序从setup()函数块中的第一条语句开始处理所有语句,并遍历从语句1到语句2再到语句3…的语句,直到setup()函数块的右大括号。但是,你可以通过使用if语句来更改此线性处理流。

if语句的语法为:

if语句由if关键字和一组括号组成。在这组括号内是一个计算结果为逻辑true或逻辑false的表达式。收到表达式处理的结果后,if指令所选择执行的语句块是一个大括号字符“{”。大括号后面跟着要执行的程序语句,并以另一个大括号“}”结束。

看看下面的代码片段:

代码片段首先定义b并将其初始化为10。然后执行一些未指定的语句,然后执行if语句。如果未知语句使b保持不变,则其值仍然为10。因为b小于20,所以表达式逻辑为true,执行if语句块,调用函数doSomethingNeat(),并将其返回值赋给b。然后执行if语句块后面的语句,并调用doSomethingElse(b)。

如果if测试为false,则将跳过if语句块,并且不会调用doSomethingNeat()。在(false)测试之后,下一个要执行的语句是doSomethingElse(b)。你可以在图4-1中更清楚地看到程序执行的路径。关系测试的逻辑真实结果执行if语句块中的语句的程序流。如果相关测试结果逻辑错误,然后跳过if语句块,程序在下面的第一条语句处继续执行if语句块的右大括号。正如你所看到的,这个计划已经基于程序的数据做出了决定。

图4-1 if语句执行流程

提醒一件事,你可能会在某个地方犯以下错误:(www.xing528.com)

请注意,关系测试(expression1)期望得到正确或错误的结果。然而,在本例中,我们使用关系表达式的单个等号,而不是正确的“等于”运算符(=)。这表示代码执行赋值语句,而不是关系测试。这就是我们所说的平头错误。就是那种你会用手猛击额头的错误:“我怎么会犯这么愚蠢的错误!”放松点,所有优秀的程序员都有轻微的缺陷——前额扁平,你应该期待自己也会受到这样的打击。好消息是虽然你可能第二次犯平头错误,但第二次会更快地发现错误,因为你知道自己可以在if语句的语句块中检查此类型的错误。

如果if语句块由单个程序语句组成,则可以省略定义语句块的大括号。例如:

工作原理与以前完全相同。如果两个版本的行为相同,那么为什么要额外击键呢?对于if语句块,你应该始终使用大括号的原因有很多。首先,始终使用大括号增加了编码风格的一致性,这总是一件好事。其次,添加大括号描述if语句,使其在阅读代码时更加突出。最后,尽管你可能认为现在只需要一条语句,后续的测试和调试可能会向你展示需要向块中添加另一条语句。如果这是真的,那么必须添加大括号;如果你不知道,你可以试试如下内容:

虽然程序员只想在b等于10时调用doSomethingNeat()和doBackupNow(),但编写代码的方式始终调用对doBackupNow()的调用,因为程序员实际编写的是:

始终记住,如果没有大括号,if语句块默认为由if测试控制的单个语句。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈