您的位置:首页 > 其它

2015-11-02 20:29 190 查看
宏定义可以分为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>带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: