2013-12-17 7 views
13

Co staram się zrobić to #define makro:Rozwiń makro wewnątrz Łańcuch znaków

#define a(2) 

a później go używać wewnątrz łańcucha dosłownym: string = "a";.

Chcę, aby ten ciąg był interpretowany nie jako ciąg, ale aby uzyskać wartość a, tj. 2. Nie udało mi się, czy ktoś może pomóc?

+1

@Jefffrey - Ten kapelusz został stworzony specjalnie dla twojego dinozaura. – Maroun

Odpowiedz

16
#define STRINGIFY2(X) #X 
#define STRINGIFY(X) STRINGIFY2(X) 
#define A 2 

Następnie STRINGIFY(A) daje "2". Możesz łączyć je z innymi literałami ciągów, umieszczając je obok siebie.

"I have the number " STRINGIFY(A) "." daje "I have the number 2.".

+2

Teraz dodaj kluczowy element, że sąsiednie ciągi literałów są połączone, a to jest odpowiedź. – pmr

4

Nie, nie można wykonywać ekspansji makr INSIDE ciągi literałów (to znaczy mają preprocesor do przeglądania literałów dla makr do rozwinięcia).

Można rozwinąć makro, aby utworzyć ciąg literału rozpoczynający się od operatora stringify (#). Ale to inna sprawa.