c/c++语言开发共享这个if语句实际上是如何工作的

如何在不使用分号的情况下打印hello world一直是一个流行的问题。我知道许多代码,但这个听起来很奇怪,因为我无法得到它背后的逻辑。请帮我知道它是如何打印的。

if(printf("hello world")){} 

    关于分号的一点点只是“我比你更聪明”误导。

    但是,当你得到这个时,你会对c有所了解;

    这是一系列可能有用的程序。 编译并运行每一个,然后考虑它们的作用以及它们与之前的不同之处:

     #include  int main(int argc, char**argv){ int i = printf("Hello, world!n"); printf("%dn",i); return 0; } 

     #include  int main(int argc, char**argv){ if ( 1 ) { printf("condition evaluated as truen"); } else { printf("condition evaluated as falsen"); } return 0; } 

     #include  int main(int argc, char**argv){ if ( printf("Hello, world!n") ) { printf("condition evaluated as truen"); } else { printf("condition evaluated as falsen"); } return 0; } 

     #include  int main(int argc, char**argv){ if ( printf("Hello, world!n") ) { } return 0; } 

    最后,您可以省略main的返回(在这种情况下隐式返回0)。 所以你得到:

     #include  int main(int argc, char**argv){ if ( printf("Hello, world!n") ) { } } 

    这是Hello,world的完整,标准兼容版本! 没有任何分号。

    无论如何,你必须在if语句之后添加分号,或者你必须在它之后放一个空块。

     if(printf("hello world")) ; 

    要么

     if(printf("hello world")) {} 

    编辑:我确信在问题中没有空块……我一定读错了,或者它已被忍者编辑过。

    它的工作原理是因为printf是一个正常的函数,返回打印的字符数(你可以从文档中清楚地看到); if语句显然会计算表达式,从而调用函数(顺便在屏幕上打印字符串)。

    printf()是一个返回打印数字的普通函数,所以基本上代码首先调用printf()然后检查它的返回值是否为true(即输出的字符数超过0)。 这是“hello world”的情况,但无关紧要,因为条件块无论如何都是空的。

    看看文档:

     int printf ( const char * format, ... ); 

    回报价值

    成功时,返回写入的字符总数。 失败时,返回负数。

    因此它在Hello World案例中返回12 11并且该数字被解释为真值。 需要计算if的值以决定执行哪个代码块,这意味着首先调用printf()。

    由于printf的返回类型是一个数字,并且所有数字都为真且不为0且0为假,因此可以计算if语句中的数字。 这就是源代码工作的原因。 当您在评估中调用函数时,函数必须在评估发生之前返回值,因此printf执行它必须执行的操作,返回一个数字,if会对其进行求值。 这就是这个源代码的作用。

    由于操作处于这种状态,因此不需要分号(这就是为什么它没有分号的原因)。

    你实际上是作为条件传递给printf的输出“if”。

    printf返回一个整数,写入的字符总数,所以如果让我们说printf写出25个字符然后它返回25并且你的“if”语句正在做这样的事情……

     if( printf( "blahblahblah"/* 25 characters */ ) ){} if( 25 ){} if( TRUE == 25 ) { // do nothing } 

    在“if”语句评估条件时,它会执行该条件中的任何内容。 因此,当“if”语句启动它的评估时,printf被执行,打印出文本并将字符数返回到“if”条件的检查(printf的返回值)。 然后“if”语句决定是运行TRUE还是FALSE部分。 只有一个空的TRUE部分,因此在执行printf语句并评估返回后它什么都不做。

    if语句将简单地检查表达式是否已计算为非零值。 所以

    if (printf("Hello World")) { }

    几乎是一样的

    if (printf("Hello World") != 0) { }

    需要调用哪个printf来评估表达式。

      以上就是c/c++开发分享这个if语句实际上是如何工作的相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐