如何在不使用分号的情况下打印hello world一直是一个流行的问题.我知道许多代码,但这个听起来很奇怪,因为我无法得到它背后的逻辑.请帮我知道它是如何打印的.
if(printf("hello world")){}
Run Code Online (Sandbox Code Playgroud)
dmc*_*kee 30
关于分号的一点点只是"我比你更聪明"误导.
但是,当你得到这个,你会知道关于c的事情;
这是一系列可能有用的程序.编译并运行每一个,然后考虑它们的作用以及它们与之前的不同之处:
#include <stdio.h>
int main(void) {
int i = printf("Hello, world!\n");
printf("%d\n",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(void) {
if ( 1 ) {
printf("condition evaluated as true\n");
} else {
printf("condition evaluated as false\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(void) {
if ( printf("Hello, world!\n") ) {
printf("condition evaluated as true\n");
} else {
printf("condition evaluated as false\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(void) {
if ( printf("Hello, world!\n") ) {
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以省略main的返回(在这种情况下隐式返回0).所以你得到:
#include <stdio.h>
int main(void) {
if ( printf("Hello, world!\n") ) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是Hello,world的完整,标准兼容版本!没有任何分号.
无论如何,你必须在if语句之后添加分号,或者你必须在它之后放一个空块.
if(printf("hello world"))
;
Run Code Online (Sandbox Code Playgroud)
要么
if(printf("hello world")) {}
Run Code Online (Sandbox Code Playgroud)
编辑:我确信在问题中没有空块...我必须读错了,或者它已被忍者编辑过.
它的工作原理是因为printf是一个正常的函数,返回打印的字符数(正如你可以从文档中清楚看到的那样); if语句显然会计算表达式,从而调用函数(顺便在屏幕上打印字符串).
printf()是一个返回打印数字的普通函数,所以基本上代码首先调用printf()然后检查它的返回值是否为真值(即输出的字符数超过0).这是"hello world"的情况,但无关紧要,因为条件块无论如何都是空的.
看看文档:
int printf ( const char * format, ... );
Run Code Online (Sandbox Code Playgroud)
回报价值
成功时,返回写入的字符总数.失败时,返回负数.
所以它在Hello World案例中返回12 11,并且该数字被解释为真值.需要计算if的值以决定执行哪个代码块,这意味着首先调用printf().