关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
5年前关闭。
Improve this question
我正在编写一个单片机。这是 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
比较相等时不会被视为真——所以不要那样做)。你甚至可以得到一个未指定的值,它可能是 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
) 如果值等于 0,1
( true
) 否则。
关于c程序将int分配给bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453910/