在没有分号且没有IF / WHILE / FOR语句的情况下,你好世界

时间:2010-11-10 18:38:17

标签: c puzzle

我的朋友说有可能编写一个C程序,打印出“hello world”而没有IF/WHILE/FOR且没有分号。经过极少的研究,我告诉她这是不可能的。有可能吗?

7 个答案:

答案 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;
}

希望这会对你有所帮助