Anu*_*ngh 0 c if-statement boolean
我一直在用C语言工作,因为它是我开始的第一语言.这次我正在用if else语句做一些编码......我发现了一些我无法理解为什么会发生的事情.代码如下跟随
#include<stdio.h>
#include<conio.h>
void main()
{
printf("How If - Else works\n");
if("hello")
{
printf("Inside if\n");
}
else
{
printf("Inside else\n");
}
getch();
}
Run Code Online (Sandbox Code Playgroud)
在这里输出是Inside if ....我想知道如何在if语句中对这个东西进行求值,并且对if语句中传递的内容有任何限制.
如果(表达式)可以转换为bool,则表达式将评估为true."hello"是一个字符串文字,它计算为一个指针,因为它不同于0,它将导致为true.空指针将返回false.
如果表达式可以隐式转换为bool,则该语句有效,并且大多数表达式都会出现这种情况:所有标量类型(字符,算术类型,指针,枚举等)以及结构/类变量(如果它们有一个运算符返回标量类型) .根本不返回任何值的函数(void)将产生错误.
C实际上没有布尔值(true或false)值(C99确实如此,但我的下面的注释仍然适用).
C解释为什么false是"0"; 其他一切都是true;
所以
if (0) {} else {printf("0 is false\n");}
if (NULL) {} else {printf("NULL is false\n");}
if (0.0) {} else {printf("0.0 is false\n");}
Run Code Online (Sandbox Code Playgroud)
文字字符串被解释为指针......它指向真实字符,所以这是真的
if (1) {printf("1 is true\n");} else {}
if (-1) {printf("-1 is true\n");} else {}
if ("hello") {printf("\"hello\" is true\n");} else {}
if (3.14159) {printf("3.14159 is true\n");} else {}
Run Code Online (Sandbox Code Playgroud)
有趣的是一个空字符串或字符串"0"或字符'0'是true
if ("") {printf("\"\" is true\n");} else {}
if ("0") {printf("\"0\" is true\n");} else {}
if ('0') {printf("'0' is true\n");} else {}
Run Code Online (Sandbox Code Playgroud)
NUL字符(不是作为指针的NULL)的int值为0且为false
if ('\0') {} else {printf("'\\0' is false\n");}
Run Code Online (Sandbox Code Playgroud)
当你有一个真正的布尔结构时会发生什么,编译器发出代码将其转换为0或1
if (a > b) /* whatever */;
// if a is greater than b, the compiler generated code will be something like
if (1) /* whatever */;
// otherwise, if a <= b, the generated code would look like
if (0) /* whatever */;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |