c程序将一个int分配给一个bool?

标签 c int boolean

<分区>

我正在为 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 类型的定义方式。如果boolint 的别名, 转换是微不足道的。如果被转换的值恰好是 01 , 结果是 falsetrue , 分别。如果该值是其他任何值,您可以获得既不是 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 ) 否则。

关于c程序将一个int分配给一个bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453910/

相关文章:

c++ - 如何最好地将 VARIANT_BOOL 转换为 C++ bool?

java - 使用 boolean 值而不是变量初始化的 For 循环

c - 为什么在不等待用户输入的情况下退出程序?

c - 使用 ncurses、sockets 和 fork 绘图

C - 为函数内的双指针赋值

c - 谁在堆栈上的结构中初始化 char 指针

java - JAVA中重载方法的调用顺序

c - 如何使用 strtok 添加数字?

c++ - 什么东西便宜 : cast to int or Trim the strings in C++?

java - Android中如何将字符转换为 boolean 二维数组?