我正在为 MCU 编程。这是gpio_read_pin()
函数的描述。它返回一个 boolean 值。
我可以将其分配给 int ack
吗?并测试 ack 是 0 还是 1?
谢谢
/**
* Read the current value of a single pin on a given GPIO port.
*
* @param[in] gpio GPIO port index.
* @param[in] pin Pin of GPIO port to read.
* @return bool Value of the pin specified on GPIO port.
*/
bool gpio_read_pin(const gpio_t gpio, const uint8_t pin);
void sendCommandSHT(int command)
{
...
int ack;
ack = gpio_read_pin(QM_GPIO_0, DATA_PIN);
if (ack != 0) {
TI_PUTS("Ack Error 0");
}
}
是的,您可以分配 int
bool
的值目的。都是整型,值都是隐式转换的。
1999 年之前的旧版本 C 没有内置 boolean 类型。通常使用以下解决方法;
typedef enum { false, true } bool;
或
#define false 0
#define true 1
typedef int bool;
对于这样的类型,转换的行为取决于 boolean 类型的定义方式。如果bool
是 int
的别名, 转换是微不足道的。如果被转换的值恰好是 0
或 1
, 结果是 false
或 true
, 分别。如果该值是其他任何值,您可以获得既不是 false
的值。也不true
, 但当用作条件时,这将被视为 true(但是当与 true
比较相等时 不是 -- 所以不要那样做)。您甚至可以获得可能为 0
的未指定值对于非零 int
值(例如,如果 bool
定义为 char
并且高位被丢弃)。
如果您不能使用现代 C,无论是因为您有 C99 之前的编译器还是因为您正在处理遗留代码,您可以规范化该值:
int n = 42;
bool b = (n == 0 ? false : true);
或
bool b = n != 0
或
bool b = !!n;
C99 添加了一个内置类型 _Bool
, 可以写成 bool
如果你有 #include <stdbool.h>
.转换为 _Bool
自动归一化该值。 int
的转换输入 _Bool
产量 0
( false
) 如果该值等于零,则 1
( true
) 否则。