У меня возникла проблема - мне нужно использовать значение макроса как в виде строки, так и как целое.
#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... */
Это не удается с сообщением о "stray #", и даже если это сработало, я предполагаю, что имена макросов будут стробированы, а не значения. Конечно, я могу передать значения окончательному методу ("LIMIT %d ", page*RECORDS_PER_PAGE
), но он не является ни хорошеньким, ни эффективным.
Это случается так, когда я хочу, чтобы препроцессор не обрабатывал строки особым образом и обрабатывал их содержимое, как обычный код.
На данный момент я сделал это с помощью #define RECORDS_PER_PAGE_TXT "10"
, но, понятно, я не доволен этим.
Как это сделать правильно?