使用#define定義函數


 

#define是一個預處理器的宏定義語句。

比如定義一個常量

#define X 100

這樣呢,在代碼段中出現的任何X的地方都將替換成100

或者定義一個表達式

#define MAX(A, B) A > B ? A : B

使用:

MAX(2,3);//將返回3

MAX(2,3)其實被替換成了2 > 3 ? 2 : 3

還可以定義一個函數

#define FUN(A,B,C) void A##B(){std::cout<<#C<<std::endl;}

使用:

FUN(fun,123,test 123);

fun123();

在使用宏定義函數的時候呢,需要先調用宏來構造出函數,然后才能使用正確的函數名來輸出。

##的意思是將A和B連接起來,如果不使用##連接的話,那么函數名就會出現fun 123中間有個空格,這不是有效的c++函數,就會報錯。

#C的意思呢,就是把C轉換成有效的c++字符串字面量,這里如果不是用#,那么,在構造函數的時候就會導致編譯器不知道C是什么類型,導致未定義。

有時候這種宏定義會非常的長,可以把宏定義寫成好幾行來顯示

#define FUN(A,B,C) voi\
d A##B(){std::cout<<#C\
<<std::endl;}

只需要在每一個換行的地方插入一個‘\'就可以了

當然了,#define常用在C語言里,在C++里呢,也有一套解決方案,比如定義一個常量可以使用 const ,或者using,定義一個函數呢,可以使用模板。

#define呢就是一種替換,而且是一種無條件的替換,只有當被替換時才能檢查出語句是否有效,這種預處理器指令也是在編譯后就消失了,不存在於源文件中。

有人說#define已經過時了,但是我相信,每一個語句的出現,都必將是有意義的。你覺得呢?

感謝查閱,如若能幫到您,是我莫大的榮幸!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM