C中超出范围的条件比较

时间:2018-06-21 18:07:41

标签: c

编译器如何解决?进行哪个隐式转换?它是否经过优化,以使条件始终为真?以下代码将始终安全吗?还是取决于编译器。

#define MaxCfgDev 500

uint8 numdev;
.
.
.
if(numdev < MaxCfgDev)
.
.
.

我知道乍一看与超出限制的数字进行比较可能没有任何意义,但可以想象一下,这个MaxCfgDev的定义不是那么明显,而是来自另一个复杂的定义,也许来自来自外部模块的其他定义并且该特定模块仅需要检查numdev是否低于某些系统级定义或其他任何内容。

2 个答案:

答案 0 :(得分:1)

#define在运行编译器之前执行符号替换。因此,替换后的条件将完全等于:

if(numdev < 500)

MaxCfgDev的定义有多“明显”无关紧要。如果计算得出的编译时间常数为256或更大,则该条件将始终为真,并且编译器可能会优化测试。

答案 1 :(得分:0)

在比较之前,Numdev被提升为int