c程序将int分配给bool?

原文 标签 c int boolean

关闭。这个问题需要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 类型的定义方式。如果 boolint 的别名,转换是微不足道的。如果要转换的值正好是 01 ,结果为 falsetrue , 分别。如果该值是其他任何值,您可以获得一个既不是 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/

相关文章:

c - 使用 -O2 减少冒泡排序 C 程序的时间

java - 如何循环问数字是否为整数?

shell - 为什么 0 在 shell 中为真但假为 1?

c++ - 为什么 std::min_element 和 company 不是专门用于 std::vector<bool>

c - 从 Matlab 运行 C 可执行文件

c++ - 对于具有 UIAccess ="true"的进程,CreateProcessAsUser 失败并显示 ERROR_ELEVATION_REQUIRED

c++ - 将十六进制缓冲区转换为unsigned int

php - 有没有办法从PHP中的 boolean 值获取 “true”/“false”字符串值?

c - 读取文件内容时出现堆 block 错误

Java 将两个整数转换为从 1 到 0 的 double 数