宏
2015-11-02 20:29
190 查看
宏定义可以分为2种:不带参数的宏定义 和带参数的宏定义。
1.不带参数的宏定义
形式:
#define宏名 字符串
比如#define ABC 10
右边的字符串也可以省略,比如#define ABC,它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。
接下来写个程序根据圆的半径计算周长
1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误
2> 对程序中用双引号扩起来的字符串内的字符,不进行宏的替换操作。
3> 在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换。只有在编译的时候才对已经展开宏名的源程序进行语法检查。
4> 定义一个宏时可以引用已经定义的宏名
2.带参数的宏定义
形式:
#define 宏名(参数列表) 字符串
使用注意:
1> 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串。
2>带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。
1.不带参数的宏定义
形式:
#define宏名 字符串
比如#define ABC 10
右边的字符串也可以省略,比如#define ABC,它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。
接下来写个程序根据圆的半径计算周长
1 #include <stdio.h> 2 3 // 源程序中所有的宏名PI在编译预处理的时候都会被3.14所代替 4 #define PI 3.14 5 6 // 根据圆的半径计radius算周长 7 float girth(float radius) { 8 return 2 * PI *radius; 9 } 10 11 int main () 12 { 13 float g = girth(2); 14 15 printf("周长为:%f", g); 16 return 0; 17 }使用注意:
1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误
2> 对程序中用双引号扩起来的字符串内的字符,不进行宏的替换操作。
3> 在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换。只有在编译的时候才对已经展开宏名的源程序进行语法检查。
4> 定义一个宏时可以引用已经定义的宏名
#define R 3.0 #define PI 3.14 #define L 2*PI*R #define S PI*R*R
2.带参数的宏定义
形式:
#define 宏名(参数列表) 字符串
1 #include <stdio.h> 2 3 #define average(a, b) (a+b)/2 4 5 int main () 6 { 7 int a = average(10, 4); 8 9 printf("平均值:%d", a); 10 return 0; 11 }
使用注意:
1> 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串。
2>带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。
相关文章推荐
- Sharepoint2010新建一个用户的方法
- JAVA DATE解析(时间戳解析为固定格式)
- Daily Scrumming* 2015.11.2(Day 14)
- java方法创建
- Qt头文件中的QT_BEGIN_NAMESPACE
- 动态网站开发技术学习1:走进ASP.NET
- c++ string类详解
- 爬虫技术浅析
- Emmy Noether传记资料(2010-01-27 23:37:43)
- 今天学一招 android dimen中设置不带单位的数值
- android蓝牙的调试(博通蓝牙工作 and 低功耗模式)
- 两种include方式及filter中的dispatcher解析
- Python学习--字典和元组
- Mongodb副本集的维护
- android 之 ExpandableListView列表中的列表
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
- hdu1412
- hdu1412
- hdu1412
- OC之Block的初级学习