欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
通過(guò)#define連接字符串的特殊方法[轉]

通過(guò)#define連接字符串的特殊方法[轉]

//在#define中,標準只定義了#和##兩種操作。#用來(lái)把參數轉換成字符串,##則用來(lái)連接兩個(gè)前后兩個(gè)參數,把它們變成一個(gè)字符串。

#define Conn(x,y)    x##y   //連接x,y

#define ToChar(x)    #@x    //加單引號

#define ToString(x)  #x     //加雙引號

 

    最近看com相關(guān)的資料,看到CCmdTarget實(shí)現com接口的時(shí)候,去讀了一些宏的定義,在afxdisp.h頭文件中

#define BEGIN_INTERFACE_PART(localClass, baseClass) \
class X##localClass : public baseClass \

本來(lái)這個(gè)宏定義很容易理解的,但是這里多出個(gè)X##,我真沒(méi)見(jiàn)過(guò)這種用法,不曉得它是什么用意。
后來(lái)問(wèn)了幾個(gè)朋友也都不知道。

你知道么?

也許你也不知道~呵呵,最后我還是找到了相關(guān)的資料,解讀了這個(gè)define,還順便認識了另外兩個(gè)不常用的define

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x連接y,舉例說(shuō):
int n = Conn(123,456);   結果就是n=123456;
char* str = Conn("asdf", "adf")結果就是 str = "asdfadf";
怎么樣,很神奇吧

再來(lái)看#@x,其實(shí)就是給x加上單引號,結果返回是一個(gè)const char。舉例說(shuō):
char a = ToChar(1);結果就是a='1';
做個(gè)越界試驗char a = ToChar(123);結果是a='3';
但是如果你的參數超過(guò)四個(gè)字符,編譯器就給給你報錯了!error C2015: too many characters in constant   :P

最后看看#x,估計你也明白了,他是給x加雙引號
char* str = ToString(123132);就成了str="123132";

最后留幾個(gè)小試驗給大家去測測:
#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));
結果會(huì )如何呢? 嘿嘿嘿嘿~


其他一些雜七雜八的東西:
我先定義了一個(gè)宏
#define TE text
我想再定義一個(gè)宏,能將TE變?yōu)樽址?text").
即定義:
#define STR(str) ??? //使用STR(TE)時(shí)能替換為"text"。
請問(wèn)???部分怎么實(shí)現呢?用#str是達不到目的的了,用'"'##str##'"'也不對。

#不能做二次替換,可以再定義一個(gè)中間宏
#define TE text
#define AD TE
#define STR(AD) #AD
試試

直接定義兩個(gè)宏得了!
#define TE text
#define TE_S "text"


#define STR abc
char arr[10] = "STR";
為什么arr數組中是STR而不是abc,define不是簡(jiǎn)單的字符替換嗎?

#define A "aaa"
#define B "bbb"A
我對macro這個(gè)東西不大熟悉……不過(guò)這樣可以成功printf("%s\n",B);


在#define中,標準只定義了#和##兩種操作。#用來(lái)把參數轉換成字符串,##則用來(lái)連接兩個(gè)前后兩個(gè)參數,把它們變成一個(gè)字符串。
#include <stdio.h>
#define paster( n ) printf( "token " #n" = %d\n ", token##n )
int main()
{
int token9=10;
paster(9);
return 0;
}
輸出為
[leshy@leshy src]$ ./a.out
token 9 = 10

補充一點(diǎn): 在用#define 定義時(shí) ,可以用斜杠("\") 續行.與vb中的下劃線(xiàn)(" _")作用同.
比如:
#define add1( x, y ) ( x + y)
也可以表示成 :
#define add1(x,y) \
(x + y )

3個(gè)普通用法
1.
C: #define X 100   ----> C++: const int x=100;

2.
C: #define MAX(a,b) ((a)>(b)?(a):(b))
C++: inline int max(int a,int b){ return a>b?a:b;}

3.
     #ifndef NULL
         #define NULL ((void*)0)
     #endif

     #ifndef _myheadfile_h
         #define _myheadfile_h
     #endif

分類(lèi): C++
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
#define宏定義中的#,##,@#,\ 這些符號的神奇用法
你也許不知道的#define用法
C語(yǔ)言之#define用法(宏定義命令)
C#通過(guò)OLEDB讀取Excel文件
#define中的#、## && #@
Preprocessor Operators(#、#@、##)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久