c/c++语言开发共享为什么“hello”在布尔条件下评估为true?

我一直在用C语言工作,因为它是我开始的第一语言。这次我正在用if else语句做一些编码……我发现了一些我无法理解为什么会发生的事情。代码是跟随

#include #include void main() { printf("How If - Else worksn"); if("hello") { printf("Inside ifn"); } else { printf("Inside elsen"); } getch(); } 

在这里输出是Inside if ….我想知道如何在if语句中对这个东西进行求值,并且对if语句中传递的内容有任何限制。

    C实际上没有布尔值( truefalse )(C99可以,但我的下面的注释仍然适用)。

    C解释为false是什么“0”; 一切都是true ;

    所以

     if (0) {} else {printf("0 is falsen");} if (NULL) {} else {printf("NULL is falsen");} if (0.0) {} else {printf("0.0 is falsen");} 

    文字字符串被解释为指针……它指向真实字符,所以这是真的

     if (1) {printf("1 is truen");} else {} if (-1) {printf("-1 is truen");} else {} if ("hello") {printf(""hello" is truen");} else {} if (3.14159) {printf("3.14159 is truen");} else {} 

    有趣的是,空字符串或字符串"0"或字符'0'true

     if ("") {printf(""" is truen");} else {} if ("0") {printf(""0" is truen");} else {} if ('0') {printf("'0' is truen");} else {} 

    NUL字符(不是作为指针的NULL)具有int值0并且为false

     if ('') {} else {printf("'\0' is falsen");} 

    当你有一个真正的布尔结构时会发生什么,编译器会发出代码将其转换为01

     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 */; 

    如果(表达式)可以转换为bool,则表达式将评估为true。 “hello”是一个字符串文字,它计算为一个指针,因为它不同于0,它将导致为true。 空指针将返回false。

    如果表达式可以隐式转换为bool,则该语句有效,大多数表达式都会出现这种情况:所有标量类型(字符,算术类型,指针,枚举等)以及结构/类变量(如果它们有一个运算符返回标量类型) 。 根本不返回任何值的函数(void)将产生错误。

    如果声明只处理真假。 所以,如果它不是假的,那么其他一切都是真的。

    False可以是0,FALSE(bool),NULL。 所有表达式都被评估为true或false之一。

    在您的情况下,它的计算结果为true,因为它不是虚假表达式之一。

    C没有布尔数据类型。 因此,需要真值的语句接受等于0的值表示false而任何其他值表示trueNULL也计算为false (它是一个定义为0的宏)。

    在您的代码中, "hello"是指向字符串的非null(不同于0)指针。 这样, if语句内部总是true

    任何具有值的东西都可以用作这种语句的表达式。

    C中的“字符串文字”表示字符序列。 这将计算为零或NULL以外的NULL ; 所以控制流入if循环。

    任何独立的表达式都可以在if条件括号内使用semntics进行评估,如C标准中所述 :

    逗号运算符的左操作数被计算为void表达式; 评估后有一个序列点。 然后评估右操作数; 结果有它的类型和价值

    因此,如果您执行以下操作,程序流程将进入else部分:

     if(1,1,1,0) { printf("Inside ifn"); } 

    因为表达式的结果采用最后一个操作数( 0 )的值。

    字符串等于值True。 因此,您的程序流进入if主体而不是else主体。

      以上就是c/c++开发分享为什么“hello”在布尔条件下评估为true?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519814.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐