The C Book - 第一章 C语言概述 (1) The C Book - 第一章 C语言概述 (3)
May 18

第1.3节 例1.1的讲解

1.3.1 里面有什么

即使是这么小的一个程序例子,也包括了不少关于C的内容。不说别的,它首先就包括了两个函数,一个“#include”语句,以及一些注释。由于注释是最容易的掌握的,我们就先来看看注释。

1.3.2 排版布局和注释

C语言程序的排版对于编译器来说并不十分重要。但为了让程序易读易懂,你可以利用排版的自由来放入额外的信息。这点是很重要的。C语言可以让你在程序里几乎任何地方放入空格、制表符或换行符而不影响程序的意义。这三种字符对于编译器来说都是一样的,统一称为空白符,因为这些字符仅仅只是改变打印的位置而不会在输出设备上有任何“可见”的打印效果。空白符几乎可以放在程序的任何地方,除了标志符、字符串以及字符常量以外。所谓标志符,意思就是函数或其它物件的名称。对于字符串和字符常量,我们以后还会讲到,但现在不必理会它们的含义。

除了特殊情况以外,空白符只是用来把两个可能混淆在一起的东西隔开。在前面的例子中,void show_message 中间就必须要有一个空格来隔开,而 show_message( 可以在小括号 ( 之前放一个空格,也可以不放,这完全是风格问题。

C语言中的注释从 /* 这样两个字符开始。这两个字符之间不能有空格。从那里开始,直到 */ 这两个字符为止,这中间的所有东西都会被吞掉,被一个空格取而代之。在旧版C里,规则有所不同。以前的规则是注释可以出现在空格可以出现的任何地方,而新的规则是注释本身就是空格。这个规则变化并不大,到了第七章,当我们讲到预处理器时才会变得明显。对注释结尾如此规定,其后果之一就是你不能把一个注释放到另一个注释里面,因为第一次出现的 */ 这样两个字符就标志着注释结束了。这有点令人讨厌,不过习惯就好了。

如果注释占了多于一行,通常我们会在每一行前面加上一个星号 *,使它更为醒目,就像例子里显示的那样。

1.3.3 预处理器语句

这个例子里的第一个语句,是一条预处理器指令。在从前,一个C语言编译器分为两个阶段:一个预处理器,然后是真正的编译器。预处理器是一个宏处理器,用来对程序做简单的文本处理,然后其结果才送到编译器进行编译。预处理器很快被认为是编译器的重要组成部分,所以现在它已经被定义为C语言不可或缺的一部分了。

预处理器只知道一行一行的文字,所以对于分行是敏感的。这与C语言其它部分不同。虽然有可能写出一个多行的预处理器指令,这种指令是不常见的,也容易让人看不懂。凡是第一个可见字符为井号#的程序行,都是预处理器指令。

在例1.1中,“#include” 指令使得含有该指令的那一行被另一个文件的内容完全取代。在这里,包括在左右尖括号(<>)之间的,就是那个文件的名字。这是一个很常见的技巧,用来把一个标准头文件里的内容放到你的程序中,而不用费力去把这些内容再重新输入一遍。这个叫做 <stdio.h> 的文件是一个很重要的文件。如果没有它里面所含的信息,就不能用标准函数库做输入或输出。所以,如果你要使用标准输入输出函数,就必须包含这个 <stdio.h> 文件。而旧版的C对此则没有严格要求。

1.3.3.1. Define 语句

预处理器的另一个能力,也是被广泛应用的一个能力,就是它的 #define 语句。它是这样用的:

#define 标志符 替换文本

这个意思就是说,凡是程序中“标志符”出现的地方,它都会被后面的替换文本所取代。这里的标志符总是大写字母。这是为了方便读者理解程序的惯用写法。而后面的替换文本可以是任何文本--要记住预处理器是不懂C的,它只懂文本。这个语句最常见的用法,就是为常数起名字:

#define PI 3.141592
#define SECS_PER_MIN 60
#define MINS_PER_HOUR 60
#define HOURS_PER_DAY 24

然后像这样使用这些常数的名字:

circumf = 2*PI*radius;
if(timer >= SECS_PER_MIN){
mins = mins+1;
timer = timer - SECS_PER_MIN;
}

预处理器给出的结果,就好像你写了下面这样的程序一样:

circumf = 2*3.141592*radius;
if(timer >= 60){
mins = mins+1;
timer = timer - 60;
}

小结

预处理器语句是一行一行进行处理的,而C语言其它部分则不是。

#include 语句是用来读入某一特定文件的内容的,通常被用来使用库函数。

#define 语句通常被用来给常数起名字。习惯做法是把这样的名字全部用大写字母表示。

 

 

“The C Book - 第一章 C语言概述 (2)”有一篇评论

  1. 咨询 Says:

    一对字符 /*
    ———
    汉语说一对的时候,一般指两个相同或者同类事物

    就说 两个字符 更好



    有道理。已经改了。– eng

发表评论

CAPTCHA Image
*