我是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;
}
答案 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)
我更愿意避免使用true
和false
,因为它们是您使用C语言的固有方式。
整数值0为false。非0值为真。所以
if (apples) {...}
将在apples != 0
时执行。
C语言将根据特定测试给出1
的值。
int a = (apples > 0);
在所有语言中都不是这样,有些人认为-1
为真。但是,永远不需要与0,真或假进行比较。
if (a) {...}
只有笨拙的代码会尝试使用true
和false
。否则,逻辑流程是甜蜜的。
使用TRUE
if ((ptr == NULL) == TRUE) {...}
当
if (ptr == NULL) {...}
完成这项工作。
答案 4 :(得分:1)
return counter==0
如果int
等于1
,则返回counter
值0
,否则返回int
值0
。
在C等式和关系运算符中,始终生成int
或0
的{{1}}值。请注意,这在C ++中是不同的,默认情况下,这些运算符返回类型为1
的值。
答案 5 :(得分:0)
return counter==0
生成int
,因为返回类型为int
它的值为0
或1
。
counter==0
本身会产生int
。
==
(等于)和!=
(不等于)运算符类似于关系运算符,除了它们的优先级较低。)如果指定的关系为true,则每个运算符产生1如果为假则为0。结果的类型为int
。 ......C11§6.5.93
该函数返回int
,无论是否尝试返回3.14
- 它都将转换为int
。 @wildplasser
int is_finished(){
...
return true;
...
return 3.14
}