异常退出

你可能已经注意到,上一章中写就的程序是存在问题的。试着输入下面的语句,看看会发生什么。

  1. Lispy Version 0.0.0.0.3
  2. Press Ctrl+c to Exit
  3. lispy> / 10 0

噢!程序竟然崩溃了,因为 0 不能作为除数。在开发过程中,程序崩溃是很正常的。但我们希望最后发布的产品能够告诉用户错误出在哪里,而不是粗暴的崩溃。

目前,我们的程序仅能打印出语法上的错误,但对于表达式求值过程中产生的错误却无能为力。C 语言并不擅长错误处理,但这却是不可避免的。而且随着系统复杂度的提升,后期再开始做的话难度就更大了。

C 程序的“崩溃传统”历史悠久。任何程序出了错,操作系统只管将其内存回收。程序崩溃的原因和方式也千奇百怪。但是 C 程序并非是由魔法驱动的,如果你的程序运行出了错,与其坐在屏幕前“望眼欲穿”,不如借此机会学习一下调试工具 gdbvalgrind 的用法。学会使用这些强大的工具,会让你事半功倍。