C++宏定義中的 # 和 ## 指令

1) #:構串操作符

#是“字符串化”的意思。出現在宏定義中的#是把跟在後面的參數轉換成一個字符串。
構串操作符#只能修飾帶參數的宏的形參,它將實參的字符序列(而不是實參代表的值)轉換成字符串常量。

#define WARN_IF(EXP) \
       { if (EXP)  fprintf(stderr, "Warning: " #EXP " found.\n");}

//測試例子

    char *pErrorInfo1 = NULL;
    char *pErrorInfo2 = "error divided by 0.";
    WARN_IF(pErrorInfo1);
    WARN_IF(pErrorInfo2);

//結果輸出如下:

Warning: pErrorInfo2 found.

 

2) ##:合併操作符
合併操作符##將出現在其左右的字符序列合併成一個新的標識符。

##是一個連接符號,用於把參數連在一起。

 

以下例子可以看出兩者的使用區別:

#define paster( n ) printf( "iUser" #n"_ID = %d\n ", iUser##n##_ID )
所以paster(1);就是相當於 printf("iUser1_ID = %d\n",iUser1_ID);

 

參考文章:

C++中的#和##操作符

C++中的##和#的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章