Ít nhất một số bộ tiền xử lý C cho phép bạn xâu chuỗi giá trị của một macro, thay vì tên của nó, bằng cách chuyển nó qua một macro giống hàm đến một macro khác để xâu chuỗi nó:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Các trường hợp sử dụng ví dụ ở đây .
Điều này hoạt động, ít nhất là trong GCC và Clang (cả hai với -std=c99
), nhưng tôi không chắc nó hoạt động như thế nào trong các điều kiện tiêu chuẩn C.
Hành vi này có được C99 đảm bảo không?
Nếu vậy, làm thế nào để C99 đảm bảo điều đó?
Nếu không, tại thời điểm nào thì hành vi đi từ C-xác định đến GCC-xác định?