2012-04-18 10 views
10

'u text'a dönüştürmesi gereken makro argümanı un-stringify olmasını istiyorum.Bir C makrosunda alıntıları kaldırmanın bir yolu var mı?

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

Şimdi Bu makro stringification tersi olur bu makro onun argümanı

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

den "" kaldıracaktır çağırarak:

#define STRINGIFY(x) #x 

bu mümkün mü, yoksa makro ile oynuyorum kötülük?

+0

Mümkün olduğu takdirde ne yapmak istediniz? – iammilind

+3

Bu mümkün değil; meraktan, amaçlanan kullanım nedir? – dasblinkenlight

+0

Eh, normalde sadece stringify kullanacağım, ancak bazı makroları yeniden düzenliyorum ve gerçekten arama modelini değiştirmek istemiyorum. # #define THIS_MACRO (sringParam) const char * var = stringParam; '#define THIS_MACRO (stringParam) const karakterine dönüşür * un ## stringParam = stringParam;'. – syvex

cevap

15

Bu mümkün değil. Ve bu muhtemelen iyi bir şeydir: Bir dizgeyi geçirirseniz, onun içine her şeyi koyabilirsiniz. Birleştirme işleminin aniden derlenmesi, derleyicinin aslında bu dizenin içeriğini önemsemesiyle sonuçlanır.