9

これは欠陥のあるコードです

#include<stdio.h>

#define CAT_I(A, B)         A ## B
#define CAT(A, B)           CAT_I(A,B)

void main (void)
{
        printf(CAT("HELLO","WORLD"));
}

なぜそのエラーが発生するのですか?どうすれば修正できますか?

編集

これが私がやろうとしていることです

#define TAG                   "TAG"
#define PRE                   CAT(CAT("<",TAG),">")  
#define POS                   CAT(CAT("</",TAG),">") 

#define XML      CAT(CAT(PRE,"XML SOMETHING"),POS)   

それから

printf(XML); 
4

1 に答える 1

9

の結果は単一のトークンで##なければならず、単一のトークンで"HELLO""WORLD"はありません。文字列を連結するには、単純にそれらを横に置いておきます。

printf("HELLO" "WORLD");

または、マクロを変更して##.

#define CAT(A, B) A B

文字列リテラルは、間にトークンが介在しない場合に連結されます。

于 2012-06-22T12:52:42.790 に答える