问这个程序能正常工作,但在结束后会 core dump。为什么?
struct list { char *item; struct list *next; } /* Here is the main program. */ main(argc, argv) { ... }
答结构体声明末尾缺少一个分号导致main被声明为返回一个结构体。(由于中间的注释,两者之间的联系很难看出来。)由于结构体值的函数通常是通过添加一个隐藏的返回指针来实现的(参见问题 2.9),生成的代码main()试图接受三个参数,尽管只传递了两个(在这种情况下,由 C 启动代码传递)。另请参见问题 10.9 和 16.4。
参考文献:CT&P 第 2.3 节,第 21-2 页