bool - 255值

时间:2012-10-02 21:22:59

标签: c

我定义了这个函数:

struct heap_validation {
    size_t num_alloc;
    size_t num_alloc_sz;
    struct memory *mem;
};
...
bool get_isallocated(struct metadata_record *);

当我从hashtable_traverse调用heap_validation函数并打印结果时,我得到了以下值:0,255,246

void hashtable_traverse(struct metadata_record *metarec,
        struct heap_validation *heap_val) {

    printf("get_isallocated(metarec): %d\n",get_isallocated(metarec));

    bool retrieved = false;
    bool allocated = get_isallocated(metarec);
    if (allocated) {
        heap_val->num_alloc += 1;

我也试过%d,我得到了相同的结果。

4 个答案:

答案 0 :(得分:1)

如果您不包含<stdbool.h>,则bool不能保证为_Bool

在C ++(§4.5/ 4)中,当一个值转换为bool时,它变为0或1:

  

bool类型的rvalue可以转换为int类型的rvalue,false变为零,true变为1。

在C(§6.3.1.2/ 1)中,当一个值转换为_Bool时,它变为0或1:

  

当任何标量值转换为_Bool时,如果值比较等于0,则结果为0;否则,结果是1。

如果您获得的值除零和一之外,则bool不是_Boolget_isallocated()返回的值除零或一之外:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  _Bool x=69;
  printf("x=%d\n",x);
  exit(EXIT_SUCCESS);
}

将打印出x=1

答案 1 :(得分:0)

如果我理解你是正确的,那么也许你想要布尔输出: -

printf("get_isallocated(metarec): %d\n",get_isallocated(metarec)!=0);

printf("get_isallocated(metarec): %s\n",get_isallocated(metarec)!=0?"True":"False"); 

它会输出01

答案 2 :(得分:0)

您应该从0 1类型中获取值stdbool.hbool

如果不是这种情况,您的程序(可能是get_isallocated函数)正在调用未定义的行为,或者您没有使用bool中的stdbool.h,而是使用另一个标准整数类型的别名

答案 3 :(得分:0)

事实证明,函数“hashtable_traverse”是GLib的g_hash_table_foreach()调用以迭代GHashTable的函数,它需要键和值。我只有值和指向用户数据的指针。

metarec是值,键应该是地址指针(第一个参数),而heap_val是用户数据,在g_hash_table_foreach()

中是可选的