Me enfrenté a un problema: necesito usar un valor de macro como cadena y como número entero.Stringification de un valor de macro
#define RECORDS_PER_PAGE 10
/*... */
#define REQUEST_RECORDS \
"SELECT Fields FROM Table WHERE Conditions" \
" OFFSET %d * " #RECORDS_PER_PAGE \
" LIMIT " #RECORDS_PER_PAGE ";"
char result_buffer[RECORDS_PER_PAGE][MAX_RECORD_LEN];
/* ...and some more uses of RECORDS_PER_PAGE, elsewhere... */
Esta falla con un mensaje sobre "perdida #", e incluso si funcionaba, supongo que me gustaría obtener los nombres de macro Stringified, no los valores. Por supuesto, puedo enviar los valores al método final ("LIMIT %d ", page*RECORDS_PER_PAGE
) pero no es bonito ni eficiente. Es en momentos como este cuando deseo que el preprocesador no trate las cadenas de una manera especial y procese su contenido al igual que el código normal. Por ahora, lo hice con #define RECORDS_PER_PAGE_TXT "10"
, pero comprensiblemente, no estoy contento con eso.
Cómo hacerlo bien?
Preprocesado correctamente para mí en gcc. – kennytm
Ejemplo en kernel de Linux: http://lxr.free-electrons.com/source/include/linux/stringify.h?v=4.7 –