預編譯小常識
阿新 • • 發佈:2019-02-03
熟悉預處理識別符號:
//__LINE__
//__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)巨集定義時不區分定義的型別,函式需要區分引數型別
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; }
(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;
}
#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; }