2011-07-28 33 views
6

cpp GNU cho phép bạn biến vĩ mô thông số thành chuỗi như vậyLàm cách nào để biến macro thành chuỗi bằng cpp?

#define STR(x) #x 

Sau đó, STR(hi) được thay thế bằng "hi"

Nhưng làm thế nào để bạn bật một macro (không phải là một thông số vĩ mô) thành một chuỗi ?

Giả sử tôi có macro CONSTANT với một số giá trị, ví dụ:

#define CONSTANT 42 

Điều này không hoạt động: STR(CONSTANT). Điều này mang lại "CONSTANT" mà không phải là những gì chúng tôi muốn.

+0

Tôi giả sử bạn muốn đầu ra là "42" - Tôi không nghĩ rằng bạn có thể mà không cần viết một hàm. – Soren

Trả lời

14

Bí quyết là xác định macro mới gọi STR.

#define STR(str) #str 
#define STRING(str) STR(str) 

Sau đó, STRING(CONSTANT) sản lượng "42" như mong muốn.

+0

Tôi tin rằng dấu và được sử dụng như thế này thường được gọi là toán tử "xâu chuỗi" macro. –

+5

'#' không phải là "dấu". –

10

Bạn cần đôi gián tiếp kỳ diệu:

#define QUOTE(x) #x 
#define STR(x) QUOTE(x) 

#define CONSTANT 42 

const char * str = STR(CONSTANT); 
+1

+1 để sử dụng tên có ý nghĩa. – ArjunShankar

Các vấn đề liên quan