マクロ定義(define)における'##と'###の使い方


マクロ定義は、一括変更が容易であるだけでなく、関数呼び出しのオーバーヘッドを低減します.マクロ定義(define)の「##」と「###」の意味:defineの「#」と「##」は文字列をつなぐのに一般的に使われていますが、実際の使用過程では、わずかな違いがあります.は文字列化の意味で、#defineの後に現れる'#'は後に続くパラメータを1つの文字列に変換することです;##'接続記号で、パラメータを接続します.eg1:
#define  strcpy__(dst, src)      strcpy(dst, #src)      //#src     “src” 

strcpy_(buff,abc)はstrcpy__に等しい(buff,“abc”)
eg2:
#define FUN(arg)     my##arg                //FUN(arg)     myarg

FUN(ABC)はmyABCに等しい
eg3:
#include 

using namespace std;

#define  OUTPUT(A) cout<

int main()
{
    int a=1,b=2;

    OUTPUT(a);
    OUTPUT(b);
    OUTPUT(a+b);

    return 1;
}

出力:
a:1
b:2
a+b:3

番号を消してこのような結果を得て、直接a,bの値を印刷しました.これは文法規則に合っているので、#の役割は明らかです.
#define  OUTPUT(A) cout<<A<<":"<A)<;

出力:
1:1
2:2
3:3