宏定义#define

 不带参数的宏定义

1.宏定义指令#define用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串,在程序中每次遇到该标识符时就用所定义的字符串替换它。宏定义的作用就是给指定的字符串起个别名,下面是不带参数的宏定义一般形式:

#define 宏名 字符串

#define PI 3.14159

该语句作用是用PI替代3.14159,在编译源程序过程中遇到PI就替换为3.14159.

宏定义的好处:比如要替换程序中的某个常量时,只需改变#define命令行,整个程序的常量都会改变,大大提高了程序的灵活性。(宏定义不是C语言,不需要在末尾加分号。)

2.如果在串中含有宏名,则不进行宏替换
#include<stdio.h>
#define LOL "this is a game"
main()
{
    char Exp[30]="This LOL is not that LoL";
    printf("%s\n,Exp");
}

    上面的LOL并没有用 This LOL is not that LOL来代替

   可以用#undef命令来终止宏定义的作用域。

宏定义用于预处理命令,它不同于定义的变量,只做字符替换,不分配内存空间。

2.带参数的宏定义

#define 宏名 (参数表)字符串      //注意宏名与带参数的括号之间不可以加空格

#include<stdio.h>
#define MIX(a,b) ((a)*(b)+(b))						/*宏定义求两个数的混合运算*/
main()
{
	int x=5,y=9;
	printf("x,y:\n");
	printf("%d,%d\n",x,y);
	printf("the min number is:%d\n",MIX(x,y)); 				/*宏定义调用*/
}

好处:提升代码速度,因为不存在调用函数                             缺点:重复编码,代码冗长。

注意事项:1、宏定义时参数要加上括号,不加结果可能正确也可能错误

例如:x=2,y=1+2    MIX(x,y),输出结果与想要结果就不符合

2、宏扩展必须用括号来保护表达式中低优先级的操作符,以确保调用时不会出错

例如:调用MIX(x,y),MAX(x,y)不加括号会变成     5*(a)*(b)+(b)而希望得到

5*((a)*(b)+b))

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值