作为编程的基本要素,你听到的另一个概念是算法。算法是处理数据的指令集,通常用于在计算机上完成工作。算法的一个经典比喻是厨房食谱。比如,在给定一组配料的情况下,要将这些配料变成蛋糕所需要采取的步骤。在编程中,这些“单独步骤”就是语句。
在C语言中,语句有各种各样的形式。在本章中,我将介绍声明语句、初始化语句、函数调用和注释。后面的章节将讨论控制语句和非完全语句,如创建自己的函数和预处理器命令。
语句之间用分号隔开。分号在C语言中的作用很像英语中的句号。英语中的长句可能跨越多行,但你知道要一直看到句号。同样,你可能会在一行中看到几个短句,但你可以很容易地根据句号将它们区分开来。语句末尾的分号很容易被忘记。如果每条语句都独立成行,就很容易让人认为编译器也能“看到”人类能轻易分辨出的结构。不幸的是,编译器无法做到这一点。即使是1.2.2节中的第一个非常简单的程序,我们用来在终端窗口中打印一些文本的语句也需要以分号结束。如果你好奇,可以试着删除分号,保存文件,然后重新编译。最后你会得到这样的结果:
呃,错误。但至少错误信息是有用的。它告诉我们两件关键的事情:出错的地方(“表达式后应当有';'”)和编译器出错的地方(“hello.c:4:27”,或 hello.c 文件,第4行,第27列)。我不想在你学习C语言的初期就用错误信息来吓唬你,但你肯定会遇到很多错误信息。令人欣慰的是,这只意味着你需要再仔细看看你的源代码,然后再试一次。
分隔符告诉编译器一条语句在哪里结束,下一条语句在哪里开始。这个顺序也很重要。语句的流向是从上到下,如果多条语句在同一行,则是从左到右。多语句是绝对允许的!我们可以快速扩展简单的“Hello,World”程序,使其更加冗长。
如果你有时间和精力,我强烈建议你手工抄写源代码。这会让你对C的语法更熟悉。你还会经常犯一两个错误。发现并纠正这些错误是一种很好的学习方法,即使这些错误有时会让人感到沮丧。
请看下面的程序 ch02/verbose.c :
❶我们以一条与 hello.c 中非常相似的语句开始。唯一真正不同的是我们打印的文本。请注意,我们以分号分隔符结束该行。
❷我们有第二条与第一条类似的printf()语句。它确实会第二个被执行。
❸为了让大家明白这一点,第三份声明将在前两份声明之后被调用。而后两次调用将在这一次之后。
下面是简单的多行升级的输出结果:
不错。你可以看到输出是如何精确地按照我们程序中语句的顺序进行的。试着把它们调换一下,看看程序的流程是否从上到下。或者试着把两个printf()调用放在同一行。这并不难。我只是希望你尽可能多地练习编写、运行和编译代码。你尝试的示例越多,就越能避免简单的错误,也就越容易跟上新的代码示例。