预编译小常识

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

//__FILE__

//__DATE__
//__TIME__

#include
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
#define PRINT(n) \
	printf("num" #n " = %d",num##n)
int main()
{
	int num4=4;
	PRINT(4);
	return 0;
}


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

#include
#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
#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;
}





你可能感兴趣的:(C语言学习总结)