最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析C++中的#,##,和

 更新時間:2020年09月10日 11:26:47   作者:chinabinlang  
這篇文章主要介紹了C++中的#,##,和"的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

想要靈活應(yīng)用宏,離不開#和##。

"
在學(xué)習(xí)###之前,先來看一個關(guān)于"的例子:

#include <stdio.h> 
#include <string.h> 
 
int main() 
{ 
 const char* p1 = "Hello," "World!";  // 一個空格 
 const char* p2 = "Hello," "World!"; // 多個空格 
 const char* p3 = "Hello,""World!";  // 沒有空格 
 const char* p4 = "Hello,World!";  // 一個整串 
 const char* p5 = "Nihao,""Shijie!"; // 一個不同的串 
 
 printf("p1 = %s, strlen(p1) = %d\n", p1, strlen(p1)); 
 printf("p2 = %s, strlen(p2) = %d\n", p2, strlen(p2)); 
 printf("p3 = %s, strlen(p3) = %d\n", p3, strlen(p3)); 
 printf("p4 = %s, strlen(p4) = %d\n", p4, strlen(p4)); 
 printf("p5 = %s, strlen(p5) = %d\n", p5, strlen(p5)); 
 
 return 0; 
} 

輸出為:

p1 = Hello,World!, strlen(p1) = 12 
p2 = Hello,World!, strlen(p2) = 12 
p3 = Hello,World!, strlen(p3) = 12 
p4 = Hello,World!, strlen(p4) = 12 
p5 = Nihao,Shijie!, strlen(p5) = 13 

查看PE文件的常量字符串段,發(fā)現(xiàn)經(jīng)過編譯器優(yōu)化后只存在一個Hello,World!串。

即p1,p2,p3,p4這四種寫法是等價的,這一點作為之后解釋#用法的前提。

字符串化操作(#)

當(dāng)用作字符串化操作時,#的主要作用是將宏參數(shù)不經(jīng)擴展地轉(zhuǎn)換成字符串常量。

要點:

  • 宏定義參數(shù)的左右兩邊的空格會被忽略,參數(shù)的各個Token之間的多個空格會被轉(zhuǎn)換成一個空格。
  • 宏定義參數(shù)中含有需要特殊含義字符如"或\時,它們前面會自動被加上轉(zhuǎn)義字符\。

還是通過MSDN上的例子來看看容易懂:

#define F abc 
#define B def 
#define FB(arg) #arg 
#define FB1(arg) FB(arg) 
 
FB(F B) 
FB1(F B) 

初看到時推測這兩行預(yù)編譯出來后效果是一樣的,但是看了使用gcc -E編譯出來代碼,這才理解了MSDN上對“不經(jīng)擴展”有了更深刻的理解,實際的預(yù)編譯后代碼為:

"F B"; 
"abc def"; 

推測變換過程應(yīng)該如下:

FB(F B) --> #F B -->"F B" 
FB1(F B) --> FB1(abc def) --> FB(abc def) --> #abc def --> "abc def" 

標(biāo)記連接操作(##)
將多個Token連接成一個Token。
要點:

  • 它不能是宏定義中的第一個或最后一個Token。
  • 前后的空格可有可無。

來理解一下MSDN上舉的例子:

#include <stdio.h> 
#define paster( n ) printf_s( "token" #n " = %d", token##n ) 
int token9 = 9; 
 
int main() 
{ 
 paster(9); 
} 

paster(9);的預(yù)處理步驟應(yīng)該如下:

  • paster(9);
  • printf_s( "token" #9 " = %d", token##9 );
  • printf_s( "token" "9" " = %d", token9 );
  • printf_s( "token9 = %d", token9 );

這樣應(yīng)該就很好理解了。

參考MSDN

Stringizing Operator(#) : http://msdn.microsoft.com/EN-US/library/7e3a913x(v=VS.110,d=hv.2).aspx
Token-Pasting Operator(##) : http://msdn.microsoft.com/EN-US/library/09dwwt6y(v=VS.110,d=hv.2).aspx

到此這篇關(guān)于C++中的#,##,和"的文章就介紹到這了,更多相關(guān)C++中的#,##,和"內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言折半查找法介紹及使用示例

    C語言折半查找法介紹及使用示例

    折半查找法也叫做?分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪?半中,再重復(fù)上述步驟知道找到?標(biāo)key,下面這篇文章主要給大家介紹了關(guān)于C語言折半查找法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 怎么在C++二進制文件中注入git信息詳解

    怎么在C++二進制文件中注入git信息詳解

    這篇文章主要給大家介紹了關(guān)于怎么在C++二進制文件中注入git信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • 解析結(jié)構(gòu)體的定義及使用詳解

    解析結(jié)構(gòu)體的定義及使用詳解

    本篇文章是對結(jié)構(gòu)體的定義以及使用進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • do...while(0)的妙用詳細(xì)解析

    do...while(0)的妙用詳細(xì)解析

    do...while(0)消除goto語句;通常,如果在一個函數(shù)中開始要分配一些資源,然后在中途執(zhí)行過程中如果遇到錯誤則退出函數(shù),當(dāng)然,退出前先釋放資源
    2013-09-09
  • C++編程中break語句和continue語句的學(xué)習(xí)教程

    C++編程中break語句和continue語句的學(xué)習(xí)教程

    這篇文章主要介紹了C++編程中break語句和continue語句的學(xué)習(xí)教程,break和continue是C++循環(huán)控制中的基礎(chǔ)語句,需要的朋友可以參考下
    2016-01-01
  • C語言開發(fā)實現(xiàn)通訊錄管理系統(tǒng)

    C語言開發(fā)實現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言開發(fā)實現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++樹之遍歷二叉樹實例詳解

    C++樹之遍歷二叉樹實例詳解

    這篇文章主要給大家介紹了關(guān)于C++樹之遍歷二叉樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 完全掌握C++編程中構(gòu)造函數(shù)使用的超級學(xué)習(xí)教程

    完全掌握C++編程中構(gòu)造函數(shù)使用的超級學(xué)習(xí)教程

    這篇文章主要介紹了C++中的構(gòu)造函數(shù),包括C++11標(biāo)準(zhǔn)中的新特性的介紹,十分推薦!需要的朋友可以參考下
    2016-01-01
  • c++實現(xiàn)合并文件以及拆分實例代碼

    c++實現(xiàn)合并文件以及拆分實例代碼

    這篇文章主要介紹了c++實現(xiàn)合并文件以及拆分實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Qt基于QScrollArea實現(xiàn)界面嵌套移動

    Qt基于QScrollArea實現(xiàn)界面嵌套移動

    在實際的應(yīng)用場景中,經(jīng)常會出現(xiàn)軟件界面戰(zhàn)場圖大于實際窗體大小。本文將利用QScrollArea可以為widget窗體添加滾動條,實現(xiàn)界面嵌套移動,感興趣的可以了解一下
    2022-06-06

最新評論

霍林郭勒市| 六安市| 翁牛特旗| 南郑县| 会昌县| 孝感市| 沙坪坝区| 游戏| 呼伦贝尔市| 鄱阳县| 海宁市| 武平县| 安化县| 光山县| 萨嘎县| 安义县| 综艺| 霸州市| 临洮县| 鄢陵县| 丰台区| 扬州市| 卓尼县| 区。| 文安县| 资溪县| 松溪县| 韶关市| 揭阳市| 无锡市| 温宿县| 平罗县| 杭锦后旗| 巧家县| 达州市| 郁南县| 宝鸡市| 板桥市| 汾阳市| 禄丰县| 杭锦后旗|