我的朋友说有可能编写一个C程序,打印出“hello world”而没有IF/WHILE/FOR
且没有分号。经过极少的研究,我告诉她这是不可能的。有可能吗?
答案 0 :(得分:195)
#include <stdio.h>
int main() {
switch (printf("Hello, world!\n")) {}
}
如果你的朋友说“哦,你也不能使用开关”,那么:
#include <stdio.h>
int main(int argc, char *argv[printf("Hello, world!\n")]) {}
答案 1 :(得分:73)
我一直试图找到一种从包含文件中窃取分号的“便携式”方式。这适用于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。
另一个有效的技巧是#define
离开每个标准的stdint类型,使stdint.h
减少为一堆分号。
这两个都落在FreeBSD上,因为它使用私有中间类型(如__uint8_t
),这意味着在引用的示例中删除typedef会失败,并阻止我在另一种情况下成功删除所有非分号。 / p>
似乎应该可以从包含文件中干净地窃取分号。任何人都可以改进我的尝试吗?
答案 2 :(得分:41)
我不知道是否建议这样做,因为它取决于问题的确切措辞,但是:
#error hello world
(如果没有别的,也许它会避免后续“你怎么打印没有main
的问候世界......”
答案 3 :(得分:18)
可以编写一个C程序,在没有IF / WHILE / FOR且没有分号的情况下打印“hello world”。
易。请注意,C区分大小写。
int main()
{
if (printf("Hello, World\n")){}
}
if
是C中的关键字,IF
不是。
答案 4 :(得分:16)
你也可以解决像
这样的限制#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
答案 5 :(得分:15)
怎么样:
#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}
不是C酷:)
答案 6 :(得分:2)
你可以使用switch语句来获得你想要的输出,这里是下面的代码
#include<stdio.h>
int main()
{
switch(printf("hello world"))
return 0;
}
希望这会对你有所帮助