之前習慣於在主函式外面使用巨集定義,但實際上主函式內也可使用,例:
#include
#include
#include
#include
#include
#include
intmain()
;#define min(x, y) ((x) < (y) ? (x) : (y))
char
*const end_ptr=
&g[8];
char
*tmp_ptr=g;
char
*tresh=
min(end_ptr,tmp_ptr+12)
;printf
("%ld\n%ld\n"
,(intptr_t)
(int*)
(end_ptr)
,(intptr_t )
(int*)
(tmp_ptr+12)
);printf
("%c\n"
,*tresh)
;return0;
}
執行結果為
140730577384423
140730577384427
4
#include
#include
#include
#include
#include
#include
intmain()
;#define min(x, y) ((x) < (y) ? (x) : (y))
char
*const end_ptr=
&g[8];
char
*tmp_ptr=g;
char
*tresh=
min(end_ptr,tmp_ptr)
;printf
("%ld\n%ld\n"
,(intptr_t)
(int*)
(end_ptr)
,(intptr_t )
(int*)
(tmp_ptr));
printf
("%c\n"
,*tresh)
;return0;
}
執行結果:
140737052257751
140737052257743
9
**注意:
printf
("%ld\n%ld\n"
,(intptr_t)
(int*)
(end_ptr)
,(intptr_t )
(int*)
(tmp_ptr)
);
用於輸出指標end_ptr和tmp_ptr的值,也就是位址;** 巨集定義函式使用
開闢一片棧空間 記錄返回位址 將形參壓棧,從函式返回還要釋放堆疊。函式的引數必須被宣告為一種特定的型別,所以它只能在型別合適的表示式上使用,我們如果要比較兩個浮點型的大小,就不得不再寫乙個專門針對浮點型的比較函式。反之,上面的那個巨集定義可以用於整形 長整形 單浮點型 雙浮點型以及其他任何可以用 操...
巨集定義函式
巨集定義也可以成為 巨集代換 c語言提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯。巨集定義和操作符的區別是 巨集定義是替換,不做計算,也不做表示式求解。c語言編譯工具會在預處理階段,將巨集名替換為字串。所以,我們可以把巨集定義理解為,發生在程式編譯之前的字串替換操作...
C語言巨集定義和巨集定義函式
c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...