from:
最近看com相關的資料,看到ccmdtarget實現com介面的時候,去讀了一些巨集的定義,在afxdisp.h標頭檔案中
#define begin_inte***ce_part(localclass, baseclass) \
class x##localclass : public baseclass \
本來這個巨集定義很容易理解的,但是這裡多出個x##,我真沒見過這種用法,不曉得它是什麼用意。
後來問了幾個朋友也都不知道。
你知道麼?
也許你也不知道~呵呵,最後我還是找到了相關的資料,解讀了這個define,還順便認識了另外兩個不常用的define
#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 用法
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 怎...
關於建構函式,也許你不知道的
首先看段 分析總結 為什麼使用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定義在乙個非你寫的標頭檔案裡,...