首页 / C语言 / C语言三)预处理指令
C语言三)预处理指令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言三)预处理指令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1797字,纯文字阅读大概需要3分钟。
内容图文
![C语言三)预处理指令](/upload/InfoBanner/zyjiaocheng/1179/397c6e98809c4a89947e13ee008ef96b.jpg)
一、预处理指令
1.定义
C语言在对源程序进行编译之前,会先对一些特殊的预处理指令做解释,如:#include,产生一个新的源程序,这个过程称为“编译预处理”,之后再进行通常的编译工作。
2.作用范围
预处理指令可以出现在程序的任意位置,它的作用范围是从它出现的位置到文件末尾。习惯上,我们把预处理指令写在源程序开头。
3.类型
C语言提供了预处理指令主要有:宏定义、文件包含和条件编译。
二、不带参数的宏定义
1.一般形式
#define 宏名 字符串
如:#define A 10;
// 源程序中所有的宏名PI在编译预处理的时候都会被3.14所代替 #define PI 3.14 // 根据圆的半径计radius算周长 float girth(float radius) { return 2 * PI *radius; } int main () { float g = girth(2); printf("周长为:%f", g); return 0; }
2.作用
在编译预处理的时候,将源程序中所有“宏名”替换成右边的字符串,常用来定义常量。
3.注意
1)宏名一般用大写字母,以便和变量名进行区别。
2)对程序中双引号括起来的字符串内的字符,不能进行宏的替换操作。
#define R 10 int main () { char *s = "Radio"; //这里有R,但是不会替换 return 0; }
3)在进行宏的替换操作时,不做语法的检查,只是简单的替换操作而已。只有在替换完后的下一步编译操作,才会进行语法检查。因此,如果有错误,也只会在编译的时候产生。
4)宏名的有效范围默认是从定义位置到文件末尾,如果想终止的话,可以使用“#undef 宏名“,这样,宏名的有效范围就缩减至终止操作的位置。
5)定义宏时,可以使用已经定义过的宏名。
#define R 3.0 #define PI 3.14 #define L 2*PI*R #define S PI*R*R
三、带参数的宏定义
1.一般形式
#define 宏名(参数列表) 字符串
2.作用
在编译预处理的时候,将源程序中的宏名替换成字符串,并将字符串中的参数用源程序中的宏名的实际数值代替。
3.注意
1)宏名和参数列表之间不能有空格。
2)定义宏时,参数列表有"()"括起来,字符串的参数也用"()"括起来
#include <stdio.h> #define D(a) 2*a int main () { int b = D(3+4); printf("%d", b); return 0; } //2*3+4 //输出结果:10
#include <stdio.h> #define D(a) 2*(a) int main () { int b = D(3+4); printf("%d", b); return 0; } //2*(3+4) //输出结果:14
3)计算结果也用”()“括起来
#include <stdio.h> #define Pow(a) (a) * (a) int main(int argc, const char * argv[]) { int b = Pow(10) / Pow(2); printf("%d", b); return 0; } //10*10/2*2=100 //输出结果:100
#include <stdio.h> #define Pow(a) ((a) * (a)) int main(int argc, const char * argv[]) { int b = Pow(10) / Pow(2); printf("%d", b); return 0; } //(10*10)/(2*2)=25 //输出结果:25
虽然带参数的宏定义和函数十分相似,但是还是有本质的区别:
1)宏定义不涉及存储空间的分配、参数类型分配、参数传递、返回值的问题。
2)函数在程序运行时执行,而宏替换在编译预处理时执行。所以带参数的宏比函数效率更高。
原文:http://blog.csdn.net/z18789231876/article/details/43524487
内容总结
以上是互联网集市为您收集整理的C语言三)预处理指令全部内容,希望文章能够帮你解决C语言三)预处理指令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。