C语言之预编译指令
2016-06-19 23:08
295 查看
宏在C中预编译指令是很重要的一个部分,所以必须要把它掌握:
预编译指令的概念
预编译指令指的是C源码在编译之前的预编译阶段需要处理的指令
预编译指令一般以#开头,可以定义在除函数体内的任何C源码位置
有以下几种预编译指令类型
文件包含指令:#include
宏定义:#define与#undef
条件编译指令:#if与#endif
宏定义
宏定义定义在函数之外,宏定义属于C语言中预编译指定的一部分
宏定义一般以#开头,有一下几种宏定义类型
#define 定义一个常量,函数或者执行代码的宏
#undef 取消之前的通过#define定义的宏,一旦宏被取消,后面的代码将不能使用这个宏
在#define与#undef范围内的所有代码段称为宏的作用范围,如果仅仅定义了#define而没有定义#undef,则该宏的作用范围从#define定义开始,一直到程序末尾
#ifdef,如果该宏已经定义,则此行到#endif之间的语句会被执行
#ifudef,如果该宏没有定义,则此行到#endif之间的语句会被执行
#endif,结束#ifdef或者#ifudef的作用范围
4,5,6常常组合起来用于防止重复包含或者重复定义引用
宏定义在预编译阶段进行的是文本替换操作,例如假设有宏定义
宏替换不会对文本的格式,标题,空格或者缩进做任何妥协,仅仅是严格按照文本做替换而已,举例:假设文本中有3PI这样的格式,则会宏替换成33.1415926,这个特点需要注意
宏定义虽然可以在一部分情况下代替常量,但是和真正的常量const定义还是有本质的区别的,但是在某些情况下,宏定义会比const更简洁高效
宏定义可以定义一个函数或者代码执行块,例如:
根据4得到,宏定义只是进行机械的文本替换,所以类似与8中的宏定义,如果取消了括号定义成
预编译指令的概念
预编译指令指的是C源码在编译之前的预编译阶段需要处理的指令
预编译指令一般以#开头,可以定义在除函数体内的任何C源码位置
有以下几种预编译指令类型
文件包含指令:#include
宏定义:#define与#undef
条件编译指令:#if与#endif
宏定义
宏定义定义在函数之外,宏定义属于C语言中预编译指定的一部分
宏定义一般以#开头,有一下几种宏定义类型
#define 定义一个常量,函数或者执行代码的宏
#undef 取消之前的通过#define定义的宏,一旦宏被取消,后面的代码将不能使用这个宏
在#define与#undef范围内的所有代码段称为宏的作用范围,如果仅仅定义了#define而没有定义#undef,则该宏的作用范围从#define定义开始,一直到程序末尾
#ifdef,如果该宏已经定义,则此行到#endif之间的语句会被执行
#ifudef,如果该宏没有定义,则此行到#endif之间的语句会被执行
#endif,结束#ifdef或者#ifudef的作用范围
4,5,6常常组合起来用于防止重复包含或者重复定义引用
宏定义在预编译阶段进行的是文本替换操作,例如假设有宏定义
#define PI 3.1415926,则会在预编译阶段把宏作用范围内的所有的PI文本替换为3.1415926,这种文本替换操作也可以叫做宏替换或者宏扩散
宏替换不会对文本的格式,标题,空格或者缩进做任何妥协,仅仅是严格按照文本做替换而已,举例:假设文本中有3PI这样的格式,则会宏替换成33.1415926,这个特点需要注意
宏定义虽然可以在一部分情况下代替常量,但是和真正的常量const定义还是有本质的区别的,但是在某些情况下,宏定义会比const更简洁高效
宏定义可以定义一个函数或者代码执行块,例如:
#define S(r) (PI * r * r);
根据4得到,宏定义只是进行机械的文本替换,所以类似与8中的宏定义,如果取消了括号定义成
#define S(r) PI * r * r;,则有可能在运算符优先级的影响下,会进行错误的运算逻辑,所以需要加上括号,而且一般在使用宏定义函数或者代码块等除了常量之外的运算逻辑式的时候,都是需要加上括号的
相关文章推荐
- 高精度正整数乘法问题
- 托管C++、C++/CLI、CLR
- 笔记:Effective C++
- Leetcode-4. Median of Two Sorted Arrays
- C++ STL中Map的按Key排序和按Value排序
- c语言学习笔记31之函数指针
- C++实现Java的split()函数
- B00014 C++实现的AC自动机
- C++学习总结
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
- PAT乙级练习题B1011. A+B和C
- C++——static关键字(全局变量,局部变量,函数)
- 一组数字的循环输出
- 冒泡排序(c++实现)
- 【c++程序】字符串反转
- 速算24点
- c++ hash_map用法总结
- C++中函数指针的使用
- C++中函数指针的使用
- 冒泡排序(c语言实现)