《C语言程序设计:问题与求解方法》——2.4节C语言源程序的次要组成成分:编译预处理命令、注释和声明

简介:

本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第2.4节C语言源程序的次要组成成分:编译预处理命令、注释和声明,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.4 C语言源程序的次要组成成分:编译预处理命令、注释和声明
下面我们通过更为完整的例题2.2来探讨C语言源程序的其他构成成分。
【例题2.2】输入圆球的半径,求圆球的体积。
C语言源程序如下:

0  /*
1   作者: 何勤
2   编写日期: 2009-12-25
3   功能: 输入圆球的半径,求圆球的体积
4   例题2.2
5  */
6    #include <stdio.h>
7    #define  PI  3.1416       /*指定符号常量PI的值为 3.1416  */
8    int  main(void)
9    {
10       float  r ;            /*变量定义:圆球的半径r*/
11       float  v ;            /*变量定义:圆球的体积v*/
12       
13       printf("请输入圆球的半径,以米为单位\n");  /*语句,输出提示信息*/
14       scanf("%f",&r);              /*语句,输入库函数scanf 的调用语句*/
15       v=(4.0/3.0) * PI * r * r * r ;         /*语句,赋值语句,求圆球的体积v*/
16       printf("圆球的体积是:%f立方米\n" , v );  /*语句,用printf输出圆球的体积*/
17       return  0 ;                  /*返回语句,返回到操作系统*/
18   }

C语言源程序的次要构成成分有:编译预处理命令、注释和声明(对于声明的介绍,请参见第 7章)。其中,编译预处理命令和注释是不以分号结束的语言成分。
1.编译预处理命令(例题2.2中的第6行和第7行的左边部分)
与其他许多高级程序设计语言不同,C语言的源程序在正式运行编译程序之前,必须事先运行一个编译预处理程序。编译预处理程序将根据源程序中出现的编译预处理命令,对源程序这个文本文件进行一些辅助性的文本插入(#include命令)、文本替换(#define命令)和文本选择等加工工作。
每一条编译预处理命令都是以“#”开始,并且不以分号结束。每条编译预处理命令都必须书写在一行上。
延伸与拓展:#include命令是头文件包含命令,编译预处理程序根据这种命令,将相应头文件(文件的扩展名为 .h )中的全部内容进行“复制”,然后“粘贴到”(也就是插入)源程序中头文件包含命令所指定的位置上。
编译预处理命令,通常放在C语言源程序文件的开始处。编译预处理程序执行完毕后,源程序中所有的编译预处理命令都不复存在,但源程序文件的内容得到了编译预处理程序的编辑加工。
2.注释
注释是以“/”开始,以“/”结束的字符序列。注释用来说明整个程序或某段程序的功能。源程序中的注释是给人看的,而不是给编译程序“看”的。
注释的常用方式有两种:一种是注释内容独自占据多行,对注释以下的一段程序或者整个源程序文件进行说明;另一种是出现在一行语句或定义的右边,对同一行左边的内容进行说明解释。这两种类型的注释请参见例题2.2。
编译成机器语言程序之前,源程序中的注释都会被编译程序删除掉。但良好的注释将使得源程序更易被人们读懂,使源程序更容易理解和修改。一个源程序中往往含有精妙的编程思路和技巧,不加上注释的话,半个月以后恐怕连程序的编写者都看不懂了,这是经常发生的不幸事件。
修改源程序的语句时,一定不要忘了修改相应的注释。否则,这段未经修改的注释很可能使以后的程序维护者或阅读者无所适从、深受其害。
还有一种仅仅用于单个一行的注释。单行注释只需以 “//”作为开始。比如:

#define  PI  3.1416        //指定符号常量PI的值为 3.1416  

它的使用比较方便、不易出错。但早期版本的一些C语言编译器不一定支持这种注释。
在调试程序,即查找程序有无错误、是否完善时,经常将一段源程序暂时变为注释。通常在修改程序时,也常常将废弃的程序段改变为注释。
不要忘记书写注释完毕时的结束符号“/”。最好首先输入一对“/”“/”,然后再在两者之间插入注释文本。两个作为注释的符号 和/之间不能有空格。注释“/”和“/”不支持嵌套使用。
3.标准库函数和库函数调用语句
如果所有的编程任务都要由应用程序的编写者来编写,那编程工作量就太大了。幸好有很多通用任务的编程工作都已经由前辈程序员(或其他系统程序的编写者)帮我们编写好了,保存在各种各样的函数库中。标准库函数是指编译程序(又称为编译器)附带的一批事先编写好了的、命名了的子程序。
在我们编写的C语言源程序的语句中,可以调用库函数为我们的程序做一些复杂的(然而通常是辅助性的)运算和处理工作或者输入输出工作。库函数的函数调用语句为:
库函数名(参数列表)
参数列表必须要用圆括号括起来,其中“参数列表”中的参数如果多于一个,参数之间要用逗号隔开。
比如要求出5.6的4次方是多少,就要以下述方式调用pow库函数: pow(5.6,4);要将数值2开平方,就要调用库函数sqrt(2)。
编程时调用了库函数,这些事先编译好了的子程序就可以通过“编译”步骤之后的“链接”步骤,链接到你所编写的程序之中,共同组成一个可执行的机器语言程序。
调用库函数时不要忘记包含相应的头文件。C语言中的各种常用库函数的调用方法说明,请参见附录C。
库函数名通常用的都是小写英文字符构成的标识符(参见本章后面的讨论)。
C语言中,常用的数学库函数如表2-1所示。(注意:调用以下这些数学库函数时,不要忘记加上头文件包含命令:#include 。)


e13a0679c32d8456789ba3528a59cacd6abc3393

【例题2.3】编写程序,在屏幕上显示一行文字(即一个字符串)“Hello World!”。

#include<stdio.h>
int  main(void)
{
  printf(" Hello  World!\n") ;
  return 0 ;
}
编译并运行此程序,在显示屏上我们将看到 :
Hello  World!

例题2.3只有两条语句:一条是格式化输出库函数printf()的函数调用语句。这条语句的基本的功能是:将输出库函数printf()中的一个调用参数—双引号括住的一串字符,按照原样输出在显示屏上。
输出库函数printf()中用双引号括住的一串字符“Hello World!n”称为格式控制串(有时简称为格式串)。这是调用printf()库函数时必须填写的一个重要的参数。
格式控制串中末尾的两个字符“n”不是按照原样在显示屏上输出的普通字符,而只是一个所谓的“转义字符”(以开始的转义字符的进一步说明请参见第3章),所以没有显示在屏幕上,其作用是通知输出设备(显示器或打印机)换行。
另一条是返回语句“return 0;”,这条返回语句的作用是在main()函数运行完以后,正常返回到操作系统。
4.C语言源程序的编辑、编译、链接和调试过程
一个源程序从编写、编译到运行的整个过程简述如下:
1)(用编辑软件)编辑输入源程序。一个C语言源程序编写好了后,通常必须保存在一个扩展名为.c的文件中(否则,VC++ 6.0编译器会把你的源程序当成C++源程序来进行编译)。
2)运行预处理程序,对源程序进行编译前的编译预处理工作。
3)用编译器对经过编译预处理的源程序进行编译工作。
4)根据编译器给出的错误信息和警告回到第1步修改程序中的语法错误。
5)编译无错误后,生成目标文件(文件的扩展名为 .obj)。
6)运行链接程序,将用户程序与库函数的子程序段进行链接,生成可执行程序(文件的扩展名为.exe)。
7)试运行此可执行程序,发现链接或运行时的错误则回到第1步进行修改。
8)结束调试过程,注意保存并保管好无错误的源程序文件(有必要的话可将其刻在光盘上),日后进行软件维护时这是必需的。
注意:在VC++ 6 .0集成开发环境下,编辑、预处理、编译、链接都在同一个操作界面上进行,第2步、第3步(如果程序没有语法错误的话,还包括第5步和第6步)是一次性完成的。在不同编译环境下,C语言源程序的编辑、编译、链接和调试过程是有一些区别的。本书不作详细介绍,请读者自己查阅相关资料。
【过关测试】

  1. C语言源程序是由一个或多个_______顺序组成的。其中必须有一个______。
    2.一个函数由_______和_______这两部分组成。函数体必须以____开始,以_____结束。
  2. C语言源程序中的每一个函数都被编译程序翻译成了一个机器语言的_______。
  3. C语言源程序的函数体的主要成分是_______和________。
  4. C语言中的语句序列被编译程序翻译成了_______。
  5. C语言中的定义序列被编译程序翻译成了_______。
  6. 库函数的调用方式是______。如果有多个调用参数,参数之间要用_______隔开。
  7. C语言源程序中的_______只是给人看的,_______是给编译预处理程序“看”的,定义系列是给编译程序“看”的,而语句序列则是(通过编译程序编译后)给_______“看”的。
    9.在C源程序中,什么成分以分号结束,什么成分不以分号结束?什么成分只能书写在一行上?

10.在例题2.2中标识出本节所学到的各种成分。
下面我们将讨论C语言的基本语法要素。

相关文章
|
1月前
|
C语言
C语言模块化程序设计
C语言模块化程序设计
21 0
|
15天前
|
存储 自然语言处理 编译器
编译和链接---C语言
编译和链接---C语言
|
20天前
|
C语言
【C语言】第三回 关于字符串,语句和注释的使用2
【C语言】第三回 关于字符串,语句和注释的使用
|
22天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
22天前
|
小程序 Linux API
Linux用C语言模拟‘ls‘命令
Linux用C语言模拟‘ls‘命令
11 1
|
25天前
|
编译器 C语言
【C语言】字母转换大小写的三种方法
【C语言】字母转换大小写的三种方法
43 0
|
1月前
|
存储 文件存储 C语言
《C语言程序设计》课程设计 -- 火车票票务管理系统
《C语言程序设计》课程设计 -- 火车票票务管理系统
23 1
|
1月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
1月前
|
存储 C语言
C语言顺序结构程序设计
C语言顺序结构程序设计
21 0
|
1月前
|
存储 编译器 程序员
【程序环境和预处理】C语言
【程序环境和预处理】C语言