15-语法错误
2.7.1 语法错误
程序清单2.4中有多处语法错误。如果不遵循C语言的规则就会犯语法错误。这类似于英文中的语法错误。例如,看看这个句子:Bugs frustrate be can[6]。该句子中的英文单词都是有效的单词(即,拼写正确),但是并未按照正确的顺序组织句子,而且用词也不妥。C语言的语法错误指的是,把有效的C符号放在错误的地方。
nogood.c 程序中有哪些错误?其一, main() 函数体使用圆括号来代替花括号。这就是把C符号用错了地方。其二,变量声明应该这样写:
int n, n2, n3;
或者,这样写:
int n;
int n2;
int n3;
其三, main() 中的注释末尾漏掉了 */ (另一种修改方案是,用 // 替换 /* )。最后, printf() 语句末尾漏掉了分号。
如何发现程序的语法错误?首先,在编译之前,浏览源代码看是否能发现一些明显的错误。接下来,查看编译器是否发现错误,检查程序的语法错误是它的工作之一。在编译程序时,编译器发现错误会报告错误信息,指出每一处错误的性质和具体位置。
尽管如此,编译器也有出错的时候。也许某处隐藏的语法错误会导致编译器误判。例如,由于 nogood.c 程序未正确声明 n2 和 n3 ,会导致编译器在使用这些变量时发现更多问题。实际上,有时不用把编译器报告的所有错误逐一修正,仅修正第 1 条或前几处错误后,错误信息就会少很多。继续这样做,直到编译器不再报错。编译器另一个常见的毛病是,报错的位置比真正的错误位置滞后一行。例如,编译器在编译下一行时才会发现上一行缺少分号。因此,如果编译器报错某行缺少分号,请检查上一行。