预编译小常识

熟悉预处理标识符:
//__LINE__

//__FILE__

//__DATE__
//__TIME__

#include<stdio.h>
int main()
{
 int i=0;
 for(i=0; i<10; i++)
 {
  printf("file%s\tline%d\tdate%s\ttime%s\t",
       __FILE__,__LINE__,__DATE__,__TIME__);
 }
 return 0;
}

#include<stdio.h>
#define PRINT(n) \
	printf("num" #n " = %d",num##n)
int main()
{
	int num4=4;
	PRINT(4);
	return 0;
}


2.了解宏和函数的区别。
(1)在宏定义较短执行次数较多时,一般来说宏的效率会比较高
(2)宏定义如果较长时,在函数中多次使用会使得源代码变长
(3)宏定义时不区分定义的类型,函数需要区分参数类型

#include<stdio.h>
#define SUM(X)  ((X)+(X))   
int main()
{
	int n=10;
	float m=3.1;
	int ret1=0;
	int ret2=0;
	ret1=SUM(n);
	ret2=SUM(m);
	printf("ret1=%d\n",ret1);
	printf("ret2=%f\n",ret2);
	return 0;
}

 int Max1_int(int x, int y)
 {
 	return x>y?x:y;
 }
 
 float Max2_float(float x, float y)
 {
 	return x>y?x:y;
 }
 int main()
{
	int n1 = 10;
	int n2 = 20;
	float m1 = 3.1f;
	float m2 = 4.3f;
	int ret1=0;
	float ret2=0;
	ret1=Max1_int(n1,n2);
	ret2=Max2_float(m1,m2);
	printf("ret1=%d\n",ret1);
	printf("ret2=%f\n",ret2);
	return 0;
}
3.写一个宏可以将一个数字的奇数位和偶数位交换

(1)算法分析:将所给的数字通过不断的右移与1,所得到的结果在和每次左移的数字相或,所得到的值就是交换后的数字

int main()
{
	int num = 15;
	int i = 0;
	int ret = 0;
	for(i=0; i<32; i++)
	{	
	ret = ret<<1;		
	ret =ret |((num>>i)&1);		
	}	
	printf("%u\n", ret);
	return 0;
}


(2)将其用宏定义实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define CHANGE_SITE		\
for(i=0; i<32; i++){	\
	ret = ret<<1;		\
	ret =ret | ((num>>i)&1);  \
	}
int main()
{
	int num = 15;
	int i = 0;
	int ret = 0;
	CHANGE_SITE;	
	printf("%u\n", ret);
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_happiness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值