在C中正确的Hello World

Tor*_*erg 22 c

C中正确的Hello World程序是什么?

由于"c hello world"谷歌搜索结果的第一页差别很大,很多都是老C,我希望将标准版本放在一个地方,以便于复制和粘贴.

Aes*_*ete 77

取决于你是多么懒惰::)

#error Hello World
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这绝对是正确的. (13认同)
  • 投票没有上涨或下跌,因为有时候真棒和可怕都是一样的. (4认同)
  • 我在这里学到的东西.我是C的新手所以我不知道我可以介绍我自己的错误. (3认同)
  • 非常棒? (3认同)
  • 但这不编译.正在编译!=正在运行. (3认同)

Tor*_*erg 48

我相信这是C语言中的标准Hello World程序:

#include <stdio.h>

int main(void)
{
  printf("Hello World\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 应该是`puts("hello")`或`printf("%s","hello")` (3认同)
  • 我们有一个胜利者! (3认同)

Jon*_*ler 16

在C99或C2011中,您可以使用以下五行代码:

#include <stdio.h>
int main(void)
{
    puts("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

由于C99(但不是C89)允许您省略return 0;最后,它会向调用环境返回确定性状态0(成功).它没有任何未使用的函数参数.它有puts()标题的原型.输出包括适当的行结尾.我认为它是犹太洁食,而且基本上是最小的.

  • @KorayTugay:这取决于您使用的编译器选项.我使用的选项坚持存在"void"; 如果你选择使用更宽松,更宽松的选项来运行,你可以在没有"void"的情况下离开. (3认同)

Fre*_*ihl 10

官方GNU Hello World可以在这里找到:http://www.gnu.org/software/hello/

GNU Hello程序产生熟悉,友好的问候语.是的,这是经典程序的另一个实现,它在您运行时打印"Hello,world!".

但是,与常见的最小版本不同,GNU Hello处理其参数列表以修改其行为,支持多种语言的问候语,等等.GNU Hello的主要目的是演示如何编写执行这些操作的其他程序; 它可以作为GNU编码标准和GNU维护者实践的模型.

GNU Hello是用C语言编写的.对于其他编程语言的实现,特别是包括翻译成其他语言,请参阅GNU Gettext发行版.

  • +1 Bahahahaha,太棒了.虽然我可以理解它作为模型+编码标准演示的严肃目的. (3认同)

Edw*_*uck 7

有不止一个,虽然Tor的答案很好,但我更喜欢总是使用argc/argv主函数.

#include <stdio.h>

int main(int argc, char** argv)
{
  printf("Hello World\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在一个罕见的,奇怪的事件中,printf正在检查失败,你可能会遇到

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

extern int errno;
extern FILE *stdout;

int main(int argc, char** argv)
{
  errno = 0;

  int err = printf("Hello World\n");

  if (err < 0) {
    return EXIT_FAILURE;
  }

  err = fflush(stdout);

  if (err < 0 || errno != 0) {
    return EXIT_FAILURE;
  } else {
    return EXIT_SUCCESS;
  }
}
Run Code Online (Sandbox Code Playgroud)

像任何C程序一样,为了减少错误,它已被修改了太多次.特别感谢R ..,dmp和Scooter,他们真的应该获得比我能给予的更多信誉.

  • 不返回-1,返回EXIT_FAILURE. (4认同)
  • 您的第二个版本包含多个错误.`printf`返回写入的字符数,因此您的错误测试是错误的.更巧妙的是,使用stdio进行这种错误检查是不可靠的.如果你想报告错误,你也需要`fflush`. (3认同)

Hot*_*cks 5

"官方"将是Kernighan和Ritchie在第一版"C程序设计语言"中的一个.

:

#include <stdio.h>
main()
{
    printf("hello, world\n");
}
Run Code Online (Sandbox Code Playgroud)

  • 第1版中描述的C语言版本.K&R C不再"正确",也不建议将其用作参考. (2认同)
  • @SteveJessop - 取决于你认为"正确"的东西.这当然是历史性的,因为它是原始的"你好世界".你能告诉雷诺阿他的一幅画不是"正确的"吗? (2认同)
  • 我想如果他画了巴黎的街道地图,有人在MapOverflow上要求巴黎的"正确"街道地图,并且他从c给了他们.1860.它将不再正确,并且不宜将其作为参考.有趣的是,维基百科提到了早期的"hello world",也是由Kernighan写的,用B写的.这也不是"正确的C",但它肯定是历史性的. (2认同)
  • @SteveJessop - 但应该注意"正确的文本"是"你好,世界",而不是"Hello World"或"Hello world!" 管他呢. (2认同)