我的朋友说,有可能编写一个C程序,打印出"hello world",不IF/WHILE/FOR
带分号,不带分号.经过极少的研究,我告诉她这是不可能的.可能吗?
cdh*_*wie 197
#include <stdio.h>
int main() {
switch (printf("Hello, world!\n")) {}
}
Run Code Online (Sandbox Code Playgroud)
如果你的朋友说"哦,你也不能使用开关",那么:
#include <stdio.h>
int main(int argc, char *argv[printf("Hello, world!\n")]) {}
Run Code Online (Sandbox Code Playgroud)
Ben*_*son 74
我一直试图找到一种从包含文件中窃取分号的"便携式"方式.这适用于Linux:
int main(int ac, char **av)
{
#define typedef
#define uint8_t a[printf("hello world\n")]
#include <stdint.h>
}
Run Code Online (Sandbox Code Playgroud)
这导致一个typedef unsigned char uint8_t
成为我的printf.
另一个有效的技巧是#define
取消每个标准的stdint类型,这样就stdint.h
减少了一堆分号.
这两个都落在FreeBSD上,因为它使用私有中间类型(例如__uint8_t
),这意味着在引用的示例中删除typedef失败并阻止我在其他情况下成功删除所有非分号.
似乎应该可以从包含文件中干净地窃取分号.任何人都可以改善我的尝试吗?
Ben*_*son 41
我不知道是否建议这样做,因为它取决于问题的确切措辞,但是:
#error hello world
Run Code Online (Sandbox Code Playgroud)
(如果没有别的,也许它会避免后续"如何打印你好世界main
"......)
Jer*_*myP 19
有可能编写一个C程序,它将打印"hello world"而不用IF/WHILE/FOR且不带分号.
简单.请注意,C区分大小写.
int main()
{
if (printf("Hello, World\n")){}
}
Run Code Online (Sandbox Code Playgroud)
if
是C中的关键字,IF
不是.
ken*_*ytm 16
你也可以解决这个限制
#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
Run Code Online (Sandbox Code Playgroud)
ste*_*ert 15
关于什么:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}
Run Code Online (Sandbox Code Playgroud)
不是C酷:)