2012-06-22 19 views
7

To jest wadliwy kodwklejanie Error „” Hello „” i „” WORLD „” nie daje prawidłowy przerób żeton

#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")); 
} 

Dlaczego daje ten błąd? Jak mogę to naprawić?

EDIT

To, co próbuję zrobić

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

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

następnie

printf(XML); 

Odpowiedz

8

Wynik ## musi być pojedynczy znak, a "HELLO""WORLD" nie jest pojedynczym znak. Łączenie ciągów, po prostu zostawić je obok siebie:

printf("HELLO" "WORLD"); 

stonie makro do usunięcia ##.

#define CAT(A, B) A B 

Literały łańcuchowe są łączone razem, gdy między nimi nie ma żadnych żetonów.

+0

co odnosisz do "jednego tokena"? jak mogę połączyć z preprocesorem? – trucos

+1

@trucos: Przeczytaj ostatnie zdanie odpowiedzi. Tutaj naprawdę nie ma potrzeby tworzenia makra; kompilator już nie tworzy konkatenacji dla ciebie. – cHao

+1

Jeśli nie chcę makra, nie będę pytać, moje pytanie brzmi: jak to zrobić z makrem =). Być może nie jest to możliwe – trucos

Powiązane problemy