本文共 1225 字,大约阅读时间需要 4 分钟。
在C语言中,在对程序作预处理前,编译器会对它进行几次翻译处理。
1. 编译器首先把源代码中出现的字符映射到源字符集。
2. 编译器查找反斜线后紧跟换行符的实例并删除这些实例。printf("That's wond\erful!\n");
转换成一个逻辑行:
printf("That's wonderful!\n");
3. 编译器将文本划分成预处理的语言符号(token)序列和空白序列及注释序列。注意的一点是编译器用一个空格字符代替每一个注释。
int/*这不是空格*/num;
将变成:
int num;
4. 程序进入预处理阶段,预处理器寻找可能存在的预处理指令。这些指令由一行开始处的#符号标识。
常用的几个预处理指令是:#include,#define,#if
1.文件包括
#include#include "toc.h"
2.宏替换
#define P 3.1415926
3.条件包含
#ifdef H#endif
typedef工具是一种高级数据特性,它可以为某一种类型创建自己的名字。在这个方面,它可以和#define相似,但是它们具有3个不同之处:
typedef是一种有趣的声明形式,它为一种类型引入了新的名字,而不是为变量分配空间。
使用#define可以实现typedef的一部分功能。例如:#defien BYTE unsigned char
这使预处理器用unsigned char 代替BYTE。但是也有#define实现不了的功能,例如:
typedef char *STRING;
如果没有关键字typedef,该例将STRING视为一个指针,有了这个关键字,使STRING成为char指针的标识符。因此:
STRING name,sign; -> char* name,*sign;
但是,如果这样:
#define STRING char*
那么:
STRING name,sign; -> char* name ,sign;
此时,只有name是一个指针。
也可以对结构使用typedef:
typedef struct student { int num; }Stu;
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1来声明。 这里的Stu实际上就是struct Student的别名,Stu=struct Student。不过这也是它的缺点,对于结构,除了可以在书写时省掉struct关键字之外,typedef 并不能提供显著的好处,而少些一个struct其实并没有多大帮助。
转载地址:http://bsnci.baihongyu.com/