C Traps and Pitfalls

留坑,放完假开始翻译


C Traps and Pitfalls(C陷阱与缺陷)

======================================================================================================================================

第零章:引言

我在1966年用Fortran写了我的第一个计算机程序。我本来打算计算并且打印到10000的斐波那契数列(一个每个数字是他前面两个数字之和的由1,1,2,3,5,8,13,21...组成的序列)。可想而知他不能工作:

<span style="font-size:14px;"><strong>I = 0
J = 0
K = 1
1 PRINT 10, K
I = J
J = K
K = I + J
IF ( K - 10000 ) 1, 1, 2
2 CALL EXIT
10 FORMAT ( I 10)</strong></span>


显而易见Fortran程序员会发现这个程序缺少一个结束语句。我添加了结束语句,然而,程序依旧无法编译,提出神秘的信息:错误代码 6(ERROR 6)。

仔细阅读指南之后最终找到了问题:我正在用的Fortran编译器(还是编辑器啊)不支持连续四个数字。把10000改成9999解决了这个问题。

我在1988年写了我的第一个C程序。当然它也不工作:


<span style="font-size:14px;"><strong>#include <stdio.h>

main()
{
        printf("Hello world") ;
}</strong></span>

第一次编译这个程序。结果很奇怪:终端输出像这样的东西:

<span style="font-size:14px;"><strong>% cc prog.c
% a.out
Hello world%</strong></span>

这里的%符号是系统的提醒,是一个系统提醒轮到我输入的字符。这个%出现在Hello world后面是因为我忘记了告诉系统在它后面开始新的一行。第3.10章(51页)讨论了一个更加微妙的程序错误。

这两种错误有很大的不同。Fortran的例子包含了两个错误,但是工具很好的指出了它们。这个C从技术上来说是正确的-从编译器的角度来说它没有错误。所以这里没有错误信息。编译器正确的完成了我写出来的事,它只是没有正确完成我心中想的事。

这本书关注第二种问题:程序不像程序员预期的那样工作。而且,这本书还会关注因疏忽而造成的奇怪的C程序。举个例子,考虑下这个用N作为整型数组预置量的程序片段:

int i:
int a[N]:
for (i = 0: i <= N: i ++)
        a[i] = 0:

在许多版本的C中,这个程序会进入一个无限循环!章节3.6(36页)告诉你为什么。

程序错误代表了...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值