2012-05-04 16 views
7

A pesar de que esto no es una buena práctica de codificación, quiero una macro que debería funcionar como la siguiente:C macro que crea una variable NSString con el nombre de variable como el contenido de la cadena

CREATE_STRING(fooBar) 

Y debe crear el siguiente código:

NSString *fooBar = @"fooBar"; 

Mis macro es similar al siguiente:

#define CREATE_STRING(varName) NSString *varName = @"varName"; 

Bu t ahora me sale el siguiente

NSString *fooBar = @"varName"; 

parece ser un problema tan fácil de resolver y ya he comprobado la documentación from IBM pero simplemente parece que no puede conseguir el varName en la cadena.

Respuesta

10

Esto es cómo hacerlo

#define CREATE_STRING(varName) NSString *varName = @"" #varName 

Toma ventaja del hecho de que dos constantes de cadena una tras otra se concatenan por el compilador.

+2

¿ALGUIEN realmente intentó mi solución antes de la votación negativa? –

+0

¿En qué se diferencia esto de la respuesta de @ H2CO3? – trojanfoe

+1

Es diferente ya que concatena dos cadenas, no solo inserta el nombre de C-stringified después de '@'. –

14

Uso

#define CREATE_STRING(varName) NSString *varName = @#varName 

lugar. (También en cuenta que no es necesario el punto y coma final con el fin de ser capaz de "llamada" la macro como una función similar a C).

+0

[...] Untitled.m: 7: 34: error: uso del identificador no declarado 'foo'; ¿quisiste decir 'para'? NSString * mary = CREATE_STRING (foo); ^ Untitled.m: 3: 42: nota: ampliado de 'CREATE_STRING' macro CREATE_STRING #define (varName) NSString * varName = @ # varName ^ 2 errores generados. –

+0

¿Lo llamó como CREATE_STRING (foo); (con un punto y coma al final al llamar)? Si no, intenta hacerlo. El error NO está en el punto donde se usa la macro. –

+0

Acabo de cambiar su definición de macro por la mía para obtener ese error, la suya no puede funcionar. Solo puede codificar macros en el preprocesador, por lo que el enfoque que utilicé en mi respuesta es necesario para convertir los caracteres desnudos en una macro antes de que se vuelva a codificar. –

Cuestiones relacionadas