c 编译器及#define和typedef
来源:互联网 发布:中国知网专利数据库 编辑:程序博客网 时间:2024/06/05 21:54
在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 <stdio.h>#include "toc.h"
2.宏替换
#define P 3.1415926
3.条件包含
#ifdef H#endif
typedef工具是一种高级数据特性,它可以为某一种类型创建自己的名字。在这个方面,它可以和#define相似,但是它们具有3个不同之处:
- 与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。
- typedef的解释由编译器,而不是预处理器执行。
- 虽然它的范围有限,但是在其范围内,typedef比#define更加灵活。
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其实并没有多大帮助。
- c 编译器及#define和typedef
- 【c/c++】typedef和define
- C-define宏和Typedef
- C语言 define和typedef
- C语言 typedef 和 #define
- [c/c++] typedef和define的区别
- [C/C++]Typedef和define的区别
- C/C++:typedef、#define和const
- typedef和#define的用法及区别
- typedef和#define的区别及用法
- [C++] Typedef和define的区别
- 【C++】define 和typedef 的详细区别
- [C++] Typedef和define的区别
- 浅谈C/C++中的typedef和#define
- C/C++中的typedef、#define和const
- 浅谈C/C++中的typedef和#define
- 浅淡C/C++中的typedef和#define
- 浅淡C/C++中的typedef和#define
- oscache
- hdu1496 Equations(哈希表)
- 我要成为一个技术大牛啊
- NKOI 3662 划区灌溉
- Leecode 8: String to Integer (atio)
- c 编译器及#define和typedef
- Android Activity彻底运行起来之后的回调onPostCreate( )
- [概率DP] Topcoder SRM687div2 1000 Queueing
- quartus ii 11.0安装破解破解方法:
- 利用Xcode Profile和Analyze进行性能优化
- 一个基于场景感应的android智能手机防丢失系
- leetcode 28 Implement strStr()
- SSH框架搭建
- python的工具包的安装简介