c - 这种等价是返回 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 。
解决方案
两者是等价的。
bool
被认为是整数类型,只能保存值 0 和 1。 true
值为 1 而false
值为 0。
该表达式pq->items == 0
具有类型int
,并将评估为 0 或 1。这些都是有效值,bool
因此该值将被正确转换。