BOOST_PP_STRINGIZE
dường như là một giải pháp tuyệt vời cho C++, nhưng không phải cho thường xuyên C.
Đây là giải pháp của tôi cho GNU CPP:
/* Some test definition here */
#define DEFINED_BUT_NO_VALUE
#define DEFINED_INT 3
#define DEFINED_STR "ABC"
/* definition to expand macro then apply to pragma message */
#define VALUE_TO_STRING(x) #x
#define VALUE(x) VALUE_TO_STRING(x)
#define VAR_NAME_VALUE(var) #var "=" VALUE(var)
/* Some example here */
#pragma message(VAR_NAME_VALUE(NOT_DEFINED))
#pragma message(VAR_NAME_VALUE(DEFINED_BUT_NO_VALUE))
#pragma message(VAR_NAME_VALUE(DEFINED_INT))
#pragma message(VAR_NAME_VALUE(DEFINED_STR))
định nghĩa trên cho kết quả:
test.c:10:9: note: #pragma message: NOT_DEFINED=NOT_DEFINED
test.c:11:9: note: #pragma message: DEFINED_BUT_NO_VALUE=
test.c:12:9: note: #pragma message: DEFINED_INT=3
test.c:13:9: note: #pragma message: DEFINED_STR="ABC"
Đối với "được xác định là interger", "được định nghĩa là chuỗi" và "được xác định nhưng không có giá trị" biến số, chúng hoạt động tốt. Chỉ đối với biến số "không được xác định", chúng hiển thị chính xác giống như tên biến ban đầu. Bạn phải sử dụng nó - hoặc có thể ai đó có thể cung cấp một giải pháp tốt hơn.
Nguồn
2012-04-19 11:29:58
Đối với du khách trong tương lai ... Chris Barry cung cấp giải pháp tổng quát khi kết thúc (không có thứ Boost cụ thể). – jww