了解宏和函数的区别

1.了解宏和函数的区别。
1 代码长度
宏:每次使用的时候宏的代码都会插入函数中,除非非常小的宏,不然大量重复调用必然将程序的长度增大。
函数:代码只会出现在一个地方,不会出现调用增长代码的副作用。
2 执行速度
宏:同样的代码执行速度比函数调用块
函数:会存在函数调用和返回的额外时间。(当函数执行时间远远大于调用和返回的时间时,可以将其速度等同与宏)
3 操作符优先级
宏:宏的参数求值是直接替换,附近的操作符优先级可能会引起不可预料的结果,所以在写宏的时候,不要吝啬括号,能加就加。
函数:不会因为操作符的问题引起意外的结果。
4 参数求值
宏:参数每次用于宏定义的时候都将重新求值。有副作用。
函数:参数在函数被调前只求值一次。无副作用。
5 参数类型 
宏: 与参数的类型无关,只要求参数是合法的。可以使用任何参数类型。
函数:函数的参数与类型有关,如果参数类型不同,就需要使用不同的函数,即使函数的功能完全相同。
6 调试
宏: 不可调试。
函数:可以调试。

2.写一个宏可以将一个数字的奇数位和偶数位交换。 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define change(x)(((x)&(0x55555555))<<1)|(((x)&(0xAAAAAAAA))>>1)
int main()
{
 int x;
 printf("输入一个数:");
 scanf("%d", &x);
 printf("%d\n", change(x));
 system("pause");
 return 0;
}

3.使用宏实现两个数中求较大值。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define max(a,b) a>b?a:b
int main()
{
 int a = 0;
 int b = 0;
 printf("请输入两个数:");
 scanf("%d %d", &a, &b);
 printf("%d\n", max(a, b));
 system("pause");
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值