你写的 Hello World 大部分都有 bug

User avatar

Happy Fire

Hello World 是程序员最熟悉的一句话,当你学习一门新的编程语言或者框架时,通常都是从在控制台打印 Hello World 这两个单词开始的。

但是你能想象一个简简单单的 hello world 程序也会有 bug 吗?

国外一程序员发现,很多语言实现的 Hello World 程序都有 Bug。

比如下面这个简单的 C 程序:

int main()
{
  print("Hello, World!\n");
  return 0;
}

当我们编译,执行,上面这段代码会输入 Hello World 并且返回 0 表示方法执行完成,看起来没啥问题对吧?

继续下面的实验之前,首先我们回顾一下 Linux 操作系统中的一个特殊文件 `/dev/full`, 和 /dev/null 恰好相反,任何程序尝试往 /dev/full 这个文件中写入,都会立即得到一个 磁盘已满的 IO 错误。比如:

$ echo "Hello World!" > /dev/full
bash: echo: write error: No space left on device
$ echo $?
1

知道这个文件的作用之后,我们来看一下为啥说上面这个 Hello world 程序有bug。

编译执行:

$ gcc hello.c -o hello
$ ./hello > /dev/full
$ echo $?
0

这里程序的返回值是 0 ,表示执行完成了,但是我们并没有看到 Hello World 的输出。

为什么呢?我们用 trace 命令来看一下,原来 print 函数抛出异常了:

$ strace -etrace=write ./hello > /dev/full
write(1, "Hello World!\n", 13)          = -1 ENOSPC (No space left on device)
+++ exited with 0 +++

所以你看,Hello World 没有打印,但是返回值却是 0 ,这不就是 bug 吗?

至于其他编程语言,大部分也有这个 Bug,更多详细内容请移步原文

https://blog.sunfishcode.online/bugs-in-hello-world/?utm_source=pocket_mylist

文章同步更新到语雀,既做备份,也提供另外一种阅读方式,习惯语雀的朋友可以移步至:https://www.yuque.com/jwenjian/reading-list

#程序员
  • Loading comments...