Tôi gặp sự cố - tôi cần sử dụng giá trị macro dưới dạng chuỗi và làm số nguyên.Xâu chuỗi giá trị 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... */
Điều này không thành công với thông báo về "đi lạC#", tôi đoán tôi sẽ nhận được tên macro được xâu chuỗi chứ không phải giá trị. Tất nhiên tôi có thể cung cấp các giá trị cho phương thức cuối cùng ("LIMIT %d ", page*RECORDS_PER_PAGE
) nhưng nó không đẹp và hiệu quả. Đã đến lúc tôi muốn bộ tiền xử lý không xử lý chuỗi theo cách đặc biệt và sẽ xử lý nội dung của họ giống như mã thông thường. Hiện tại, tôi đã cludged nó với #define RECORDS_PER_PAGE_TXT "10"
nhưng dễ hiểu, tôi không hài lòng về nó.
Làm cách nào để làm đúng?
Được xử lý chính xác cho tôi trên gcc. – kennytm
Ví dụ về hạt nhân Linux: http://lxr.free-electrons.com/source/include/linux/stringify.h?v=4.7 –