C语言中没有分号且没有IF / WHILE / FOR语句的hello world
我的朋友说可以编写一个C程序,打印“hello world”而不用IF/WHILE/FOR
,也不用分号。 经过最低限度的研究,我告诉她这是不可能的。 可能吗?
我一直在试图从包含文件中find一个“便携式”的方式来窃取分号。 这在Linux下工作:
int main(int ac, char **av) { #define typedef #define uint8_t a[printf("hello world\n")] #include <stdint.h> }
这导致一个typedef unsigned char uint8_t
成为我的printf。
另一个有用的技巧是#定义每个标准的stdinttypes,使stdint.h
简化为一堆分号。
这两种方法在FreeBSD上都是__uint8_t
,因为它使用私有中间types(比如__uint8_t
),这意味着在引用的例子中删除typedef失败,并且阻止我成功地移除其他情况下的所有非分号。
似乎应该可以从包含文件中干净地窃取分号。 任何人都可以改善我的尝试?
#include <stdio.h> int main() { switch (printf("Hello, world!\n")) {} }
如果你的朋友说“哦,你也不能使用开关”,那么:
#include <stdio.h> int main(int argc, char *argv[printf("Hello, world!\n")]) {}
对于是否提出这个build议,我很t裂,因为这取决于问题的确切措辞,但是:
#error hello world
(如果没有别的,也许它会避开后续“你怎么打印你好,没有main
世界”…)
可以编写一个C程序来打印“hello world”而不用IF / WHILE / FOR,也不用分号。
简单。 请注意,C是区分大小写的。
int main() { if (printf("Hello, World\n")){} }
if
是C中的一个关键字,则IF
不是。
你也可以解决这个限制
#define X i##f #define Y whi##le #define Z f##or #define W swi##tch
关于什么:
#include <stdio.h> int main(void *HAHA[printf("Hello world!\n")]) {}
不是C酷:)
你可以使用switch语句来获得你想要的输出,这里是下面的代码
#include<stdio.h> int main() { switch(printf("hello world")) return 0; }
希望对你有帮助