Zdefiniowałem makro MYMACRO. Uwaga: wartość nie jest prawidłowym NSString.Jak rozszerzyć MAKRO na NSString bez użycia konkatenacji ciągów w czasie wykonywania?
#define MYMACRO is
Makro służy wewnątrz deklarację o NSString
@"This MYMACRO fun"
Jednak preprocesor nie rozszerza makro. Wcześniej przetworzone wynik jest
@"This MYMACRO fun"
Najlepszym rozwiązaniem znalazłem tak daleko, aby dostać makra, aby rozwinąć to:
#define MYMACRO @"is"
@"This "[email protected]" fun"
Makro rozwija się jak poniżej, który jest ważny Objective-C składnia:
@"This "@"is"@" fun"
Wymaga to jednak 2 konkatenacji w czasie wykonywania.
Moje pytanie brzmi: jak wstawić makro insto NSString bez użycia żadnych ciągów konkatenacji w czasie wykonywania?
Idealnie chciałabym runtime wykonać @"This is fun"
zamiast @"This "@"is"@" fun"
Masz rację. Jeśli wygenerujesz złożenie dla kodu, który obsługuje konkatenację w ten sposób, możesz zobaczyć, że kończy się on jako jeden ciąg .asciiz. – UIAdam
Myślę, że warto dodać, że nawet jeśli konkatenacja nastąpiła w czasie wykonywania, nie warto pochylać się do tyłu, aby napisać jakieś brzydkie makro, aby zapisać kilka operacji na ciągach. Najpierw napisz wyraźny kod, a potem martw się o wydajność. Osobiście chciałbym spojrzeć na użycie stringWithFormat, aby wstawić jeden NSString wewnątrz innego. – UIAdam
@AdamW: Czy myślisz, że kompilator optymalizuje @ "To" @ "jest" @ "zabawa" na @ "To jest zabawne" podczas kompilacji? Zgadzam się z tobą, wolę mieć prosty kod źródłowy, zamiast zapisywać kilka operacji na ciągach. Wpadam w przedwczesną optymalizację i wszyscy wiemy, co to znaczy: "Przedwczesna optymalizacja jest źródłem wszelkiego zła - D. Knuth" –