2012-06-22 15 views
7

Este es el código defectuosoerror pegar "" HOLA "" y "" MUNDO "" no da una señal válida preprocesamiento

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

¿Por qué se da ese error? ¿Cómo podría solucionarlo?

EDITAR

Esto es lo que estoy tratando de hacer

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

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

continuación

printf(XML); 

Respuesta

8

El resultado de ## debe ser una sola razón, y "HELLO""WORLD" no es una sola simbólico. Para concatenar cadenas, simplemente dejarlos junto a la otra:

printf("HELLO" "WORLD"); 

o cambiar su macro para quitar el ##.

#define CAT(A, B) A B 

Los literales de cadena se concatenan juntos cuando no hay toques intermedios entre ellos.

+0

¿A qué se refiere con "un solo token"? ¿cómo puedo hacer la concatenación con el preprocesador? – trucos

+1

@trucos: Lee la última oración de la respuesta. Realmente no hay necesidad de una macro aquí; el compilador ya hace concatenación por ti. – cHao

+1

si no quiero una macro que no voy a preguntar, mi pregunta es cómo hacerlo con un macro =). Tal vez no sea posible – trucos

Cuestiones relacionadas