在阅读德州仪器为其 SensorTag 提供的示例代码时我发现了以下代码段。
void SensorTagIO_processCharChangeEvt(uint8_t paramID) {
...
if (!!(ioValue & IO_DATA_LED1)) {
PIN_setOutputValue(hGpioPin, Board_LED1, Board_LED_ON);
} else {
PIN_setOutputValue(hGpioPin, Board_LED1, Board_LED_OFF);
}
if (!!(ioValue & IO_DATA_LED2)) {
PIN_setOutputValue(hGpioPin, Board_LED2, Board_LED_ON);
} else {
PIN_setOutputValue(hGpioPin, Board_LED2, Board_LED_OFF);
}
if (!!((ioValue & IO_DATA_BUZZER))) {
Clock_start(buzzClockHandle);
}
...
}
声明是这样的(在同一个文件中)。
#define IO_DATA_LED1 0x01
static uint8_t ioValue;
if (!!(ioValue & IO_DATA_LED1))
是否比 if (ioValue & IO_DATA_LED1)
有任何优势?
最佳答案
两次应用逻辑非 (!
) 运算符的目的是将值规范化为 0 或 1。在 if 语句的控制表达式中,这没有任何区别. if 语句只关心值是零还是非零,小小的 !!
舞蹈完全没用。
一些编码风格指南可能会强制执行这种舞蹈,这可能就是您发布的 TI 代码这样做的原因。不过,我还没有看到这样做。
关于c - 使用 if (!!(expr)) 而不是 if (expr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35523023/