C语言预处理命令:#include和#define

C语言的预处理指令只在编译程序时发生作用:由预处理器根据预处理指令对程序代码做相应的修改,比如在原程序中添加某一段代码或者定义一些常量等。

预处理指令以符号“#”开头,C语言常用的预处理指令包括:
#include         //包含文件
#define          //定义常量

#include 指令是一个文件合并命令,程序在编译时,#include 语句会被 #include 后面的文件内容替换(见图 1 )。

#include  把包含文件内容插入到源程序中
图 1:#include  把包含文件内容插入到源程序中


程序运行结果展示
图 2:程序运行结果展示

#include 指令一般有两种格式,二者功能几乎等价:
#include <filename>    //包含 C语言标准库头文件
#include "filename"    //包含用户自定义头文件

当你安装 C语言编译器时,安装程序会在硬盘中创建一个目录,里面存放着一些包含有 C语言的内置函数和符号的文件,通常称这些文件为 C语言的标准库头文件(header file),头文件的扩展名以“.h”结束。表 1 列举了 C语言中常用的内置函数及其所属头文件。

表 1:C语言中常用的内置函数及所属头文件
C 函数 说明 头文件 C 函数 说明 头文件
printf( ) 输出到屏幕 STDIO.H sysytem( ) 执行 DOS 命令 STDLIB.H
scanf( ) 输入数据 STDIO.H exit( ) 退出程序 STDLIB.H
putchar( ) 输出一个字符到屏幕 STDIO.H rand( ) 返回一个随机数 STDLIB.H
getchar( ) 输入一个缓存字符 STDIO.H sqrt( ) 返回平方根 MATH.H
putch( ) 输出一个字符 CONIO.H fabs( ) 返回绝对值 MATH.H
getch( ) 输入一个不缓存字符 CONIO.H ceil( ) 上舍入取整 MATH.H
puts( ) 输出一个字符串 STRING.H floor( ) 下舍入取整 MATH.H
gets( ) 输入一个字符串 STRING.H fopen( ) 打开一个文件 STDIO.H
strcpy( ) 把字符串赋值给变量 STRING.H fclose( ) 关闭文件 STDIO.H
strcat( ) 连接两个字符串 STRING.H feof( ) 是否为文件结尾 STDIO.H
toupper( ) 把一个字母转化为大写 CTYPE.H fgetc( ) 从文件中读取一个字符 STDIO.H
tolower( ) 把一个字母转化为小写 CTYPE.H fgets( ) 从文件中读取字符串 STDIO.H
isalpha( ) 是否是字母 CTYPE.H fprintf( ) 输出到文件中 STDIO.H
isdigit( ) 是否是数字 CTYPE.H fputc( ) 把一个字符写到文件中 STDIO.H
issupper( ) 是否是大写字母 CTYPE.H fputs( ) 把字符串写到文件中 STDIO.H
islower( ) 是否是小写字母 CTYPE.H fseek( ) 定位到文件指定部分 STDIO.H

#include<filename>包含标准库头文件时一般都不需要带路径;而用#include"filename"包含非标准库头文件(用户自定义的头文件)时,如果文件不是保存在程序所在根目录下,则必须包含路径名。比如:
#include <stdio.h>              //包含标准库头文件不需要带路径
#include "mylib.h"              //包含存放在程序根目录下的自定义头文件
#include "c:\\mylib\mylib.h"       //包含存放在 c:\\mylib\ 的自定义头文件

#define 预处理指令用来定义常量。用 #define 定义的常量使用(调用)方法和变量一样,但它们不是变量,不能像变量一样被赋值,在程序运行中它们的值始终保持不变。#define 指令的格式如下:
#define <符号常量名> <常量值>       //符号常量名一般大写
例如:
#define PI 3.14159               //定义常量 PI 的值为 3.14159
#define MYNAME "王小石"           //定义常量 MYNAME 的值为“王小石”

在程序编译时,程序中所有的 PI 都会被 3.14159 替换,所有的 MYNAME 都会被“王小石”替换(见图 1 )。
在 C语言中,一般定义常量名推荐使用大写字母。这样使你在快速浏览程序时,能分辨出哪些是常量,哪些是变量。