首页 > 解决方案 > 这种等价是返回 bool 还是 int?

问题描述

我想编写以下函数来返回队列是否为空:

#include <stdbool.h>
bool QueueIsEmpty(Queue *pq)
{
    return (pq->items == 0)? true : false;
}

会为此做以下速记吗?

bool QueueIsEmpty(Queue *pq)
{
    return pq->items == 0;
}

换句话说,在进行等效检查时会返回 aint还是 a ?bool如果它返回 a bool,编译器如何知道将其转换为 a bool,或者 bool 只是int幕后花絮?

在编译器资源管理器中尝试它时,两者似乎都只是执行mov eax, 0并生成相同的程序集:https ://godbolt.org/z/bY59r3 。

标签: c

解决方案


两者是等价的。

bool被认为是整数类型,只能保存值 0 和 1。 true值为 1 而false值为 0。

该表达式pq->items == 0具有类型int,并将评估为 0 或 1。这些都是有效值,bool因此该值将被正确转换。


推荐阅读