程序的错误通常叫做bug,找出并修正错误的过程叫做调试(Debug)。试试找出下例程序的错误之处。
程序清单2.4 nogood.c程序
/* nogood.c -- 一个有错误的程序 */
#include <stdio.h>
int main(void)
(
int n, int n2, int n3;
/* 该程序有多处错误
n = 5;
n2 = n * n;
n3 = n2 * n2;
printf("n = %d, n squared = %d, n cubed = %d\n", n, n2, n3)
return 0;
)
2.7.1 语法错误
上例程序中有多处语法错误,如果不遵循C语言的规则就会犯语法错误
错误之处:
-
main()函数体使用圆括号来代替花括号
-
变量声明使用错误;应这样int n, n2, n3; 或者int n; int n2; int n3;
-
main()中注释末尾漏掉了*/
-
printf()语句末尾遗漏了分号
2.7.2 语义错误
语义错误是指意思上的错误,上诉程序示例中有这样的错误:
n3 = n2 * n2;
此处n3原意表示n的3次方,但是代码中的n3被设置成了n的4次方(n2 = n * n)。
编译器无法检测语义错误。因为这类错误并未违反C语言的规则。编译器无法了解你的真正意图,所以只能自己找出这些错误。
2.7.3 程序状态
通过逐步跟踪程序的执行步骤,并记录每个变量,便可监视程序的状态。程序状态是在程序的执行过程中,某给定点上所有变量值的集合。它是计算机当前状态的一个快照。
定位语义错误的另一种方法是:在程序中的关键点插入额外的printf()语句,以监视指定变量值的变化。通过查看值的变化可以了解程序的执行情况。对程序的执行满意后,便可删除额外的printf()语句,然后重新编译。
检测程序状态的第3种方法是使用调试器。调试器是一种程序,让你一步一步运行另外一个程序,并检查该程序变量的值