三元运算符与if / else语句…

在教“嵌入式系统C编程”时,经常会问我应该使用三元运算符还是if / else语句。隐藏在该问题后面的实际上是需要知道三元运算符是否比if / else更有效。有人可能会认为今天的编译器会生成相同的福建省体彩网。让我们快速看一下简单的比较,看看是否可以辨别两者之间的差异。

首先,让我们确定两个要比较的等效语句。下面是一些执行完全相同操作的福建省体彩网,除了左边是三元运算符的版本,右边是if / else语句实现。

陈述比较

这两个语句都将用0x10屏蔽Status.Data,如果将该位置1,则将清除Status.Data,否则将其设置为0。现在,在实际的应用程序中,这可能是一个荒谬的操作,但它至少为我们提供了一个测试平台,以查看编译器生成的福建省体彩网。在这种情况下,我将GCC用于具有所有默认优化级别的ARM Cortex-M处理器。编译器吐出以下福建省体彩网(以我自己的突出显示):

拆卸

乍一看,可能有人建议使用三元运算符会更有效,但让我们停一会儿,看看实际情况。首先,总体上使用if / else语句确实会生成更多指令,大约增加了三条指令。可能希望然后发现完全用if / else语句编写的福建省体彩网将比专门使用三元运算符的福建省体彩网使用更多的闪存空间。尽管在宏伟的事情中实际上并没有那么多三条指令,但是考虑到通过三元运算符阅读和理解if / else语句要多么容易。

其次,如果要通过if / else语句实际遵循可执行路径,则对于给定的结果,与三元运算符相比,if / else语句实际上要执行的指令更少。一个人可能会认为,在福建省体彩网大小明智的情况下,如果if / else语句稍大一些,则由于任一执行路径包含的总执行指令较少,因此if / else语句的执行速度会稍快一些。

变得更加有趣的是,如果我们开始提高优化级别,就会发现实际上可以对if / else指令进行些微优化以获得以下结果:

拆卸2

在福建省体彩网大小方面,两者本质上是等效的,但是if / else语句的每个分支将执行较少的指令,这将导致更快的执行速度。

结论:
我们可以同时使用三元运算符和if / else语句在我们的福建省体彩网中获得等效的结果。许多开发人员倾向于认为三元运算符更有效,并且在某些情况下,并且对于某些编译器和优化设置,三元运算符可能会非常有效。但是,与if / else语句相比,读取三元语句通常会造成混淆并且容易出错。由于福建省体彩网可读性的差异,我总是在三元运算符上使用if / else。通过快速了解编译器的工作情况,我们可以看到使用if / else语句不一定需要提高性能或福建省体彩网大小。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.