1. 程式人生 > >預編譯小常識

預編譯小常識

熟悉預處理識別符號:
//__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;
}