不带分号和IF/WHILE/FOR语句的C语言hello world [已关闭]

jmp7cifd  于 2022-12-02  发布在  其他
关注(0)|答案(7)|浏览(142)

已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

八年前就关门了。
Improve this question
我的朋友说,可以编写一个C程序,打印“hello world”,不带IF/WHILE/FOR,也不带分号。经过少量的研究,我告诉她这是不可能的。这可能吗?

t40tm48m

t40tm48m1#

#include <stdio.h>

int main() {
    switch (printf("Hello, world!\n")) {}
}

如果你的朋友说“哦,你也不能使用switch”,那么:

#include <stdio.h>

int main(int argc, char *argv[printf("Hello, world!\n")]) {}
dvtswwa3

dvtswwa32#

我一直在尝试找到一种“可移植”的方法来从include文件中窃取分号。

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失败,并阻止我在其他情况下成功删除所有非分号。
看起来应该可以从包含文件中干净地窃取分号。有人能改进我的尝试吗?

wnavrhmk

wnavrhmk3#

我很纠结是否要提出这个建议,因为这取决于问题的确切措辞,但是:

#error hello world

(if没有别的,也许它会避免后续的“没有main你怎么打印Hello World“...)

qqrboqgw

qqrboqgw4#

可以编写一个不带IF/WHILE/FOR和分号打印“hello world”的C程序。
简单。注意C是区分大小写的。

int main()
{
    if (printf("Hello, World\n")){}
}

if是C语言中的关键字,而IF不是。

hkmswyz6

hkmswyz65#

您还可以解决此限制,例如

#define X i##f
#define Y whi##le
#define Z f##or
#define W swi##tch
w3nuxt5m

w3nuxt5m6#

关于:

#include <stdio.h>
int main(void *HAHA[printf("Hello world!\n")]) {}

不是很酷:)

gmol1639

gmol16397#

您可以使用switch语句来获得所需的输出,下面是代码

#include<stdio.h>

int main()
{
  switch(printf("hello world"))

return 0;
}

我希望这对你有帮助

相关问题