Łączenie ciągów makr C/C ++
#define STR1 "s"
#define STR2 "1"
#define STR3 STR1 ## STR2
Czy można połączyć STR3 == "s1"?
Możesz to zrobić, przekazując argumenty do innej funkcji makra. Ale czy istnieje bezpośrednia ścieżka?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Preprocesor automatycznie łączy sąsiednie wiersze.
EDIT
:
Jak zauważono poniżej, to nie preprocesor, ale kompilator wykonuje konkatenację.
Anonimowy użytkownik
Potwierdzenie od:
[Edycja: w odpowiedzi na poniższy niepoprawny komentarz „Just for the record”, który niestety otrzymał wiele głosów za, powtórzę powyższe stwierdzenie i zauważę, że fragment programu
wyrzuca ten komunikat o błędzie z fazy wstępnego przetwarzania gcc:
błąd: wstawienie „„ s ”” i „„ 1 ”” nie daje prawidłowego tokena
wstępne przetwarzanie ]
Jednak w przypadku ogólnego wstawiania tokena spróbuj wykonać następujące czynności:
Następnie, na przykład, zarówno , jak i tworzą identyfikator , jeśli tylko nie jest zdefiniowane jako makro, w którym to przypadku generuje Kontynuując temat, są następujące makra:
Następnie,
Natomiast
Anonimowy użytkownik
Potwierdzenie od:
Jeśli przyjmiesz, że argument jest zawsze makrem z normalną wartością C, to
rozwinie go raz i sprawdzi poprawność, odrzuci to, a następnie ponownie rozwinie do łańcucha.
Zajęło mi trochę czasu, zanim zrozumiałem, dlaczego skończyło się na zamiast ... Nie 'nie zawiera .