return counter == 0产生一个布尔值或整数?

时间:2015-05-13 18:34:33

标签: c

我是C的初学者并检查此代码

int is_finished()
{
    int counter = 0;
    sem_wait(&global_mutex);
    counter = NotEatenCount;
    sem_post(&global_mutex);    
    return counter==0;
}

该函数应返回一个整数。 return counter==0在这里意味着什么?它看起来像:

if(counter==0){
  return true;
}
else{
 return false;
}

6 个答案:

答案 0 :(得分:1)

最佳解决方案是检查 - 打印typeof(:

无论如何,答案是两者。在C中,true/false关键字不是内置语言。它们只是一个定义,或者是使用它们的库的一部分,例如:

#define TRUE 1
#define FALSE 0

如果这些定义是数字,则这些定义将保存为整数,因此,每个布尔值都是一个整数(但相反的情况并非如此......除非您以这种方式定义它)。标准是0为FALSE,其余为TRUE

编辑:回顾过去,我实际回答了与客观C有关的类似问题。如果您有兴趣,请查看here

答案 1 :(得分:1)

==计算结果为0或1的整数,具体取决于比较结果。在这种情况下,如果counter等于0,函数将返回1(true);否则它将返回0。

答案 2 :(得分:1)

由于您使用的是“等于”运算符而不是“赋值”运算符,因此您将获得一个布尔函数(区别在于:http://en.wikipedia.org/wiki/Operators_in_C_and_C++)。那么你的return语句决定了这一点:

  

return(counter == 0);


我相信你想要回到这里的是

  

返回柜台   

然后在你的is_finished()函数之外等于,如果counter == 0或者没有,那就代表你的bool。

答案 3 :(得分:1)

我更愿意避免使用truefalse,因为它们是您使用C语言的固有方式。

整数值0为false。非0值为真。所以

if (apples) {...}

将在apples != 0时执行。

C语言将根据特定测试给出1的值。

int a = (apples > 0);

在所有语言中都不是这样,有些人认为-1为真。但是,永远不需要与0,真或假进行比较。

if (a) {...}

只有笨拙的代码会尝试使用truefalse。否则,逻辑流程是甜蜜的。

使用TRUE

指出声明的荒谬性
if ((ptr == NULL) == TRUE) {...}

if (ptr == NULL) {...}

完成这项工作。

答案 4 :(得分:1)

 return counter==0

如果int等于1,则返回counter0,否则返回int0

在C等式和关系运算符中,始终生成int0的{​​{1}}值。请注意,这在C ++中是不同的,默认情况下,这些运算符返回类型为1的值。

答案 5 :(得分:0)

return counter==0生成int,因为返回类型为int 它的值为01

counter==0本身会产生int

  

==(等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低。)如果指定的关系为true,则每个运算符产生1如果为假则为0。结果的类型为int。 ......C11§6.5.93

该函数返回int,无论是否尝试返回3.14 - 它都将转换为int。 @wildplasser

int is_finished(){   
   ...
   return true;
   ...
   return 3.14
}