2012-04-18 27 views
10

Giả sử tôi muốn bỏ chuỗi đối số macro sẽ biến đổi "text" thành text.Có cách nào để xóa trích dẫn trong macro C không?

#define UN_STRINGIFY(x) /* some macro magic here */ 

Bây giờ gọi macro này sẽ loại bỏ "" từ đối số của nó

UN_STRINGIFY("text") // results in ----> text 

Đây sẽ là đối diện của stringification vĩ mô:

#define STRINGIFY(x) #x 

Đây có phải là có thể, hoặc tôi đang chơi với vĩ mô tà ác?

+0

Điều bạn muốn làm, nếu có thể? – iammilind

+3

Điều đó là không thể được; vì tò mò, mục đích sử dụng là gì? – dasblinkenlight

+0

Vâng, thông thường tôi sẽ chỉ sử dụng stringify, nhưng tôi đang tái cấu trúc một số macro và không thực sự muốn thay đổi mẫu gọi. '#define THIS_MACRO (sringParam) const char * var = stringParam;' sẽ thay đổi thành '#define THIS_MACRO (stringParam) const char * un ## stringParam = stringParam;'. – syvex

Trả lời

15

Không thể thực hiện được. Và đó có thể là một điều tốt: Nếu bạn vượt qua một chuỗi bạn giả sử bạn có thể đặt khá nhiều thứ trong đó. Un-stringifying nó sẽ bất ngờ dẫn đến trình biên dịch thực sự quan tâm đến nội dung của chuỗi đó.

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