函数的目的是写一个宏,实现一个数的二进制奇偶位的交换。代码如下:
#define _CRT_SECURE_NO_DEPRECATE 1
#include<stdio.h>
#include<stdlib.h>
#define EXCHANGE(input)\
(((input)&(0x55555555))<<1)|(((input)&(0xAAAAAAAA))>>1)
int main()
{
int input;
printf("请输入一个数: ");
scanf("%d",&input);
printf("奇偶位交换后:%d ",EXCHANGE(input));
system("pause");
return 0;
}
程序运行后的结果
你也可以写一个函数,调用函数来实现这个功能。这二者的区别有哪些呢?接下来简要说明下
1 代码长度
宏:每次使用的时候宏的代码都会插入函数中,除非非常小的宏,不然大量重复调用必然将程序的长度增大。
函数:代码只会出现在一个地方,不会出现调用增长代码的副作用。
2 执行速度
宏:同样的代码执行速度比函数调用块
函数:会存在函数调用和返回的额外时间。(当函数执行时间远远大于调用和返回的时间时,可以将其速度等同与宏)
3 操作符优先级
宏:宏的参数求值是直接替换,附近的操作符优先级可能会引起不可预料的结果,所以在写宏的时候,不要吝啬括号,能加就加。
函数:不会因为操作符的问题引起意外的结果。
4 参数求值
宏:参数每次用于宏定义的时候都将重新求值。有副作用。
函数:参数在函数被调前只求值一次。无副作用。
5 参数类型
宏: 与参数的类型无关,只要求参数是合法的。可以使用任何参数类型。
函数:函数的参数与类型有关,如果参数类型不同,就需要使用不同的函数,即使函数的功能完全相同。
6 调试
宏: 不可调试。
函数:可以调试。