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