c程序为bool分配一个int?

时间:2016-04-06 14:18:52

标签: c int boolean

我正在编程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");
  }
}

2 个答案:

答案 0 :(得分:2)

是的,您可以为int对象分配bool值。两者都是整数类型,并且隐式转换该值。

1999年之前的旧版本C没有内置的布尔类型。通常使用诸如;

之类的解决方法
typedef enum { false, true } bool;

#define false 0
#define true 1
typedef int bool;

对于这种类型,转换的行为取决于布尔类型的定义方式。如果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类型0false),否则1true)。

答案 1 :(得分:1)

原始C并非真正拥有bool类型。但是,它通常定义为:

typedef enum { false = 0, true = 1 } bool;

  

我可以将此分配给int ack吗?并测试ack是0还是1?

所以对你的Q - 是的。

在C99中bool类型存在,使用<stdbool.h>