C如何处理if语句中的非布尔值?

2 c types if-statement pic mplab-c18

我有时在C程序中看到这个(我正在使用C18编译器):

unsigned char someValue = getSomeDataFromSomewhere();
if (someValue) {
    doStuff();
} else {
    doOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

我知道当你给if一个布尔循环(unsigned在C18编译器中)时会发生什么,但是当你把非布尔值放入时会发生什么?

我的猜测:doStuff()当值不为零时,以及doOtherStuff()当值为零时,它会执行.但我不知道这个,所以我想得到一些参考.

K S*_*iel 7

简单地说 - 如果它不是零,那是真的.如果它为零,则为假.


msa*_*sam 5

你的猜测是正确的:

来自WG14/N1256的§6.8.4.1

如果表达式将une等于0,则执行第一个子语句