【C语言】预处理(部分内容未整理)
2017-05-16 22:41
204 查看
预处理器的主要作用就是:
把通过预处理的内建功能对一个资源进行等价替换
最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。
1、#define name stuff 将stuff替换为name,在下文中便于理解
2、#define uchar unsigned char 用于简写关键字
3、#define do_forever for(;;) 替换一种语句
4、#define CASE break;case 自动的把一个break放在每个case的前面
注意:这种方法不要滥用,对于一些相同的代码要出现在多个地方时,通常更好的方法是用函数来实现。
(二)宏
注意:参数列表是用逗号分开的
Name和括号间不能空开
对于宏定义有一些问题,如下介绍:
(宏定义中每一部分都加上括号可避免一些问题,且宏定义后面不要有分毫,否则在替换后会另单独产生一个空语句)
(三)宏与函数
(四)#undef
作用:如果一个现有的宏需要被重新定义,那么旧的需要先移除
(五)命令行定义(暂时未用)
(六)其他(暂时未用)
当不用这里面的代码时,让X为0,用的时候X为1即可
(二)其他条件编译(暂时用到)
习惯上:包含本地函数:#include”…..”
包含函数库里的:#include<……>
把通过预处理的内建功能对一个资源进行等价替换
最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。
文件包含: #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。 条件编译: #if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。 布局控制: #progma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。 宏替换: #define,这是最常见的用法,它可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。
一、 预定义符号
为了处理一些有用的信息,预处理定义了一些预处理标识符:__LINE__ 当前(源代码文件)行号 [整数] __FILE__ 当前正在编译的文件的文件名 [字符串] __DATE__ 当前日期 [字符串] __TIME__ 当前时间 [字符串] __STDC__ 如果编译器符合ANSI C标准,该宏为1,否则为0
二、 预处理指令:(#define)
(一)几种用法:1、#define name stuff 将stuff替换为name,在下文中便于理解
2、#define uchar unsigned char 用于简写关键字
3、#define do_forever for(;;) 替换一种语句
4、#define CASE break;case 自动的把一个break放在每个case的前面
#符号应该是这一行的第一个非空字符,一般我们把它放在起始位置。如果指令一行放不下,可以通过反斜杠“/”进行控制
Eg:#define DEBUR_PRINT printf(“*file %s line %d:” \ “x = %d, y= %d,z=%d”, \ __FILE__,__LINE__, \ x,y,z)
注意:这种方法不要滥用,对于一些相同的代码要出现在多个地方时,通常更好的方法是用函数来实现。
(二)宏
#define机制中有个规定,允许吧参数替换到文本中,这种通常称为宏或者宏定义:
Eg:#define name(参数列表) stuff
注意:参数列表是用逗号分开的
Name和括号间不能空开
对于宏定义有一些问题,如下介绍:
(宏定义中每一部分都加上括号可避免一些问题,且宏定义后面不要有分毫,否则在替换后会另单独产生一个空语句)
(三)宏与函数
(四)#undef
作用:如果一个现有的宏需要被重新定义,那么旧的需要先移除
(五)命令行定义(暂时未用)
(六)其他(暂时未用)
#argument结构由预处理器转换为字符串常量”argument".##操作符用于把它两边的文本粘贴成同一个标识符。
三、 条件编译
(一)在编译时,有些语句需要忽略,可以实现注释掉的效果,还可以避免一些错误#if()….#endif, #if()…#elif()…#else
Eg:#if DEBUG ……………… #endif #define DEBUG X
当不用这里面的代码时,让X为0,用的时候X为1即可
(二)其他条件编译(暂时用到)
四、 文件包含
主要是做为文件的引用组合源程序正文习惯上:包含本地函数:#include”…..”
包含函数库里的:#include<……>
五、 其他指令(暂时未用)
相关文章推荐
- C语言字符相关部分内容小结
- ajax教程---整理w3c-school教程网站ajax部分内容
- 第一周竞赛培训内容整理——模电部分
- [整理] C语言预处理 [2012-02-07更新]
- ios开发 部分内容整理
- 在研究论文中如何整理不同部分的内容
- C语言字符相关部分内容小结
- 【C语言探索之旅】 第二部分第五课:预处理
- 【C语言探索之旅】 第二部分第五课:预处理
- 第二周竞赛培训内容整理——数电部分
- 【C语言探索之旅】 第二部分第五课:预处理
- !!声明:为了方便自己整理和助教检查,因此在最近几天将统一修改部分博客标题重新上传,或对内容做一定调整后再上传一次,以前的博客将删除部分!!
- c语言学习零碎整理(10):探讨scanf函数
- C语言学习零碎整理(6):怎样使用命令行参数
- JSTL 入门,第4部分: 访问SQL和XML内容
- c语言学习零碎整理(9):传值调用,并不简单(特别是有指针的时候)
- 整理好 Zope3Book 的前四部分
- 分享:让web页面部分内容只读
- 团队开发框架(Developement Structure for Team),内容列表及整理计划
- C语言学习零碎整理(3):sprintf函数