我正在编程mcu。这是gpio_read_pin()
函数的描述。它返回一个bool。
我可以将此分配给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");
}
}
答案 0 :(得分:2)
是的,您可以为int
对象分配bool
值。两者都是整数类型,并且隐式转换该值。
1999年之前的旧版本C没有内置的布尔类型。通常使用诸如;
之类的解决方法typedef enum { false, true } bool;
或
#define false 0
#define true 1
typedef int bool;
对于这种类型,转换的行为取决于布尔类型的定义方式。如果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
)。
答案 1 :(得分:1)
原始C
并非真正拥有bool
类型。但是,它通常定义为:
typedef enum { false = 0, true = 1 } bool;
我可以将此分配给int ack吗?并测试ack是0还是1?
所以对你的Q - 是的。
在C99中bool
类型存在,使用<stdbool.h>