你也許不知道的 define用法

2021-06-09 06:15:11 字數 1053 閱讀 2009

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定義在乙個非你寫的標頭檔案裡,...