首页 理论教育 软件工程专业导论:语言缺陷现实案例

软件工程专业导论:语言缺陷现实案例

时间:2023-10-23 理论教育 版权反馈
【摘要】:每种编程语言都有其弱点。这些弱点会带来可靠与安全的问题。下面是一个早期FORTRAN 语言的例子。图3-5 早期的FORTRAN 代码卡片第0列的穿孔表达是ASCII码的“C”,表示该行是注释行,编译器会忽略。第6列表达是续行,该行是上一行语句的续。第7~72 列是语句段。这样,整个程序就乱了,会导致航天项目的重大损失!虽然,现在的高级编程语言做得更好一些。例如,C 语言判断语句中写“=”还是“==”,其语义是不同的,程序员经常会弄错。

软件工程专业导论:语言缺陷现实案例

每种编程语言都有其弱点。这些弱点会带来可靠与安全的问题。下面是一个早期FORTRAN 语言的例子。

早期的FORTRAN 语言是用穿孔卡片制作每个语句,如图3-5所示,每行80列,每列是一个ASCII码代表一个字符。列(从左到右)都有特定的含义。

图3-5 早期的FORTRAN 代码卡片

(1)第0列的穿孔表达是ASCII码的“C”,表示该行是注释行,编译器会忽略。

(2)如果是非注释行,分为四个段:

(3)第1~5列是标签域:表达DO 或控制语句如GOTO 、IF、WRITE 、READ 以及FORMAT 语句。第一个列为0,就忽略过去。

(4)第6列表达是续行,该行是上一行语句的续。续卡片可以有多个:1,2……

(5)第7~72 列是语句段。

(6)第73~80列被忽略(原先IBM 704计算机上只读前72列)。

一个航天软件项目计算程序起初的期望如下:(www.xing528.com)

101010DO101I=1,101

这是合法的语句,其意思是:

10101 DO 101 I=1,101

由于第6列(续行标识的)0会作为空格处理,其语义是:循环101次。但是,程序员不小心,把卡片中的逗号写成了句号,如下:

101010DO101I=1.101

编译器在处理时,把上述语句翻译为赋值语句:DO101I=1.101,即值1.101会被赋给变量DO101I。而不是做101次循环。

这样,整个程序就乱了,会导致航天项目的重大损失!

注意:小学生的作文经常引用这个故事,名曰“小数点的错误”。不过小学生没明白真实的意思,现在,你应该明白了!

虽然,现在的高级编程语言做得更好一些。但是,仍有很多问题。例如,C 语言判断语句中写“=”(一个等号)还是“==”(两个等号),其语义是不同的,程序员经常会弄错。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈