清华大学出版社 TSINGHUA UNIVERSITY PRESS 第16章常见错误和程序调试 16.1常见错误分析 162程序调试
第16章 常见错误和程序调试 16.1 常见错误分析 16.2 程序调试
清华大学出版社 TSINGHUA UNIVERSITY PRESS 要真正学好C、用好C并不容易,“灵活”固然是 好事,但也使人难以掌握,尤其是初学者往往出 了错还不知怎么回事。C编译程序对语法的检查 不如其他高级语言那样严格(这是为了给程序人员 留下“灵活”的余地)。因此,往往要由程序设计 者自己设法保证程序的正确性。调试一个C程序 要比调试一个 PASCAL或 FORTRAN程序更困难 些。需要不断积累经验,提高程序设计和调试 程序的水平。 C语言有些语法规定和其他高级语言不同,学习 过其他高级语言的读者往往按照使用其他高级语 言的习惯来写C程序,这也是出错的一个原因
• 要真正学好C、用好C并不容易,“灵活”固然是 好事,但也使人难以掌握,尤其是初学者往往出 了错还不知怎么回事。C编译程序对语法的检查 不如其他高级语言那样严格(这是为了给程序人员 留下“灵活”的余地)。因此,往往要由程序设计 者自己设法保证程序的正确性。调试一个C程序 要比调试一个PASCAL或FORTRAN程序更困难 一些。需要不断积累经验,提高程序设计和调试 程序的水平。 • C语言有些语法规定和其他高级语言不同,学习 过其他高级语言的读者往往按照使用其他高级语 言的习惯来写C程序,这也是出错的一个原因
清华大学出版社 TSINGHUA UNIVERSITY PRESS 161常见错误分析 下面将初学者在学习和使用C语言(不包括C+)时 容易犯的错误列举出来,以起提醒的作用。这些 内容在以前各章中大多已谈到,为便于查阅,在 本章中集中列举,供初学者参考,以此为鉴。 (1)忘记定义变量。如: mant {x=3: printf("%dⅦn",x+y);
16.1 常见错误分析 • 下面将初学者在学习和使用C语言(不包括C++)时 容易犯的错误列举出来,以起提醒的作用。这些 内容在以前各章中大多已谈到,为便于查阅,在 本章中集中列举,供初学者参考,以此为鉴。 • (1) 忘记定义变量。如: main( ) {x=3; y=6; printf("%d\n " ,x+y); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS C要求对程序中用到的每一个变量都必须定义其 类型,上面程序中没有对xy进行定义。应在函 数体的开头加intx,y;这是学过BASC和 FORTRAN语言的读者写C程序时常见的一个错误。 在 BASIC语言中,可以不必先定义变量类型就可 直接使用。在 FORTRAN中,未经定义类型的变 量按隐含的IN规则决定其类型,而C语言则要求 对用到的每一个变量都要在本函数中定义(除非已 定义为外部变量)。 (2)输入输出的数据的类型与所用格式说明符不 致 例如,若a已定义为整型,b已定义为实型
• C要求对程序中用到的每一个变量都必须定义其 类型,上面程序中没有对x、y进行定义。应在函 数体的开头加int x,y;这是学过BASIC和 FORTRAN语言的读者写C程序时常见的一个错误。 在BASIC语言中,可以不必先定义变量类型就可 直接使用。在FORTRAN中,未经定义类型的变 量按隐含的I-N规则决定其类型,而C语言则要求 对用到的每一个变量都要在本函数中定义(除非已 定义为外部变量)。 • (2) 输入输出的数据的类型与所用格式说明符不一 致。 • 例如,若a已定义为整型,b已定义为实型
清华大学出版社 TSINGHUA UNIVERSITY PRESS a=3;b=4.5 printf(of %d\n",a, b); 编译时不给出出错信息,但运行结果将与原意不 符,输出为 ·0.00000016402 ·它们并不是按照赋值的规则进行转换(如把4.5转 换成4),而是将数据在存储单元中的形式按格式 符的要求组织输出(如b占4个字节,只把最后两个 字节中的数据按%d,作为整数输出)。 ·(3)未注意int型数据的数值范围。 一般微型计算机上使用的C编译系统,对一个整 型数据分配两个字节。因此一个整数的范围为
a=3;b=4.5; printf("%f %d\n",a,b); • 编译时不给出出错信息,但运行结果将与原意不 符,输出为 • 0.000000 16402 • 它们并不是按照赋值的规则进行转换(如把4.5转 换成4),而是将数据在存储单元中的形式按格式 符的要求组织输出(如b占4个字节,只把最后两个 字节中的数据按%d,作为整数输出)。 • (3) 未注意int型数据的数值范围。 • 一般微型计算机上使用的C编译系统,对一个整 型数据分配两个字节。因此一个整数的范围为