一些你也許不知道的 define 用法

2021-06-29 10:23:11 字數 740 閱讀 2191

#define conn(x,y) x##y

#define tochar(x) 

#@x#define tostring(x) #x

x##y表示什麼?表示x連線y,舉例說:

int  n = conn(123,456);  結果就是n=123456;

char* str = conn("asdf", "adf")結果就是 str = "asdfadf";

怎麼樣,很神奇吧

再來看#@x

,其實就是給x加上單引號,結果返回是乙個const char。舉例說:

char a = tochar(1);結果就是a='1';

做個越界試驗char a = tochar(123);結果是a='3';

但是如果你的引數超過四個字元,編譯器就給給你報錯了!error c2015: too many characters in constant   :p

最後看看#x,估計你也明白了,他是給x加雙引號

char* str = tostring(123132);就成了str="123132";

最後留幾個小試驗給大家去測測:

#define dec(x,y) (x-y)

int n = dec( a(123,1), 1230);

n = conn(123, conn(123,332) );

char* str = a("12", tostring( dec(3,1));

結果會如何呢? 嘿嘿嘿嘿~

你也許不知道的 define用法

from 最近看com相關的資料,看到ccmdtarget實現com介面的時候,去讀了一些巨集的定義,在afxdisp.h標頭檔案中 define begin inte ce part localclass,baseclass class x localclass public baseclass ...

關於建構函式,也許你不知道的

首先看段 分析總結 為什麼使用1和2兩種不同的建構函式,執行的時間有那麼大的差距,2的執行時間差不多是1的兩倍 在我的機器上1的時間是313 2的時間是625 原來建構函式中蘊含了很多的奧秘 首先在建構函式中,在執行函式體之前 注意 還有很多隱藏的操作 如果有初始化列表,則先執行初始化列表,再進入執...

你可能不知道得define

define g variable 26.5 記號g variable可能不會被編譯器看到,在進行預處理的時候,g variable已經被替換成26.5,於是g variable並未進入符號表,此時執行次變數出現錯誤的提示可能只會提到26.5,若此時g variable定義在乙個非你寫的標頭檔案裡,...