黑马程序员——c语言宏定义

来源:互联网 发布:淘宝店铺要交税吗 编辑:程序博客网 时间:2024/06/05 21:14

宏定义可以分为2种:不带参数的宏定义 和 带参数的宏定义。

下面就开始介绍一下宏定义:

1:不带参数的宏定义 

1>宏定义的声明(后面不需要加逗号):

#define 宏名 字符串

eg: #define a 5

右边的字符串也可以省略,比如#define ABC

2>宏定义的使用:
1.宏定义是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。
2.示例代码:
 #define PI 3.14 #include "stdio.h" int main() {      double r = 10.0 ;      double circleArea = 2 * PI * r ;      printf("circleArea is %d\n", circleArea);      return 0; }

该代码定义了一个PI的宏,在编译预处理之后,第6行中的PI就会变成3.14。
输出结果为:c is 62.8 

3>注意点
1.宏名一般用大写字母,以便与变量名区别开来,
2.在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换,只有在编译的时候才对已经展开宏名的源程序进行语法检查。
eg:

#define NAME jackint main(){      int a = NAME ;      return 0;}

在进行预编时不会检查语法,在int a = NAME,中会把NAME换为jack,当程序在编译的时候会报错。

3.宏定义可放在程序的任何地方,可以在不需要宏定义的时候使用#undef

eg:

#include <stdio.h>int main(){     char *name = "jack" ;     #define COUNT 4     for( int i = 0 ; i < COUNT ; i++)     {            printf("%c" , name[i] ) ;     }     #undef  }


4.宏定义的生命周期是从宏定义的声明到文件结束(若有#undef则是从宏定义开始到#undef)

2:带参的宏定义

1>带参的宏定义声明

#define 宏名(参数列表) 字符串

eg : #define PINGFANG( (a) ) ( a*a )

2>带参宏定义使用

eg:

 #define PINGFANG( (a) ) (a*a)//定义一个参数的宏 #include "stdio.h" int main() {        int c = PINGFANG(5);//该行会被替换成 int c = 5*5 ;        printf("c is %d\n", c);        return 0; }

3>使用注意:只作简单的字符和参数的替换,不进行任何计算操作。

1.定义宏时,一般用一个小括号括住字符串的参数。

eg:(不用括号括住)

 #define pingfang(a) (a*a) #include "stdio.h" int main() {     int c = pingfang(5+5);     printf("c is %d\n", c);     return 0; }

 结果:

 c is 35

 分析:

 由于宏定义只是对定义的宏进行替换,而不做运算

 所以a会被替换成5+5,则执行宏运算为5+5*5+5

 所以执行完c的结果为35

2.同理在宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串


0 0
原创粉丝点击