2012-05-10 11 views
25

Nie mogę uzyskać #elifdef do pracy w moim projekcie iOS. Jeśli to zrobię:Czy Objective-C obsługuje #elifdef?

#ifdef X 
const Foo bar[] = { ... }; 
#else 
const Foo bar[] = { ,,, }; 
#endif 

Następnie górny (pod X) zostaje podświetlony, a dolny nie. Jeśli to zrobię:

#ifdef W 
const Foo bar[] = { ;;; }; 
#elifdef X 
const Foo bar[] = { ... }; 
#else 
const Foo bar[] = { ,,, }; 
#endif 

Następnie dolny (pod innym) zostanie podświetlony, a dwa pierwsze nie. Czemu? Czy jest inny sposób, w jaki powinienem to robić? Mam trzy cele i wszystkie używają tego samego pliku m. Jednak stałe są nieco różne dla każdego celu, więc rozdzielam je w ten sposób.

+4

Nigdy nie użyłem tego polecenia przed procesem; Zawsze używałem '#elif defined (THING)'. – trojanfoe

+0

@trojanfoe Dzięki! Tak to zrobiło! Nie wiem prawie nic o poleceniach preprocesora, ale wyszukiwarka google znalazła wiele osób używających #elifdef, więc próbowałem go użyć. – borrrden

Odpowiedz

70

można po prostu napisać:

#elif defined X 

który powinien być kompatybilny ze wszystkimi kompatybilnymi ANSI-C kompilatory.

+0

Doskonały! Jestem za młody, by doświadczyć C, więc nie wiem o wielu takich rzeczach. Nie bardzo wiedziałem też, jakie zapytanie powinienem wyszukać w Google. Nie pozwoli mi zaakceptować twojej odpowiedzi przez 9 minut, ale wrócę. – borrrden

+6

I będę teraz jadł moją stopę, ponieważ widzę, że jesteś w tym samym wieku co ja ...> _ < – borrrden

+0

Spójrz tutaj: http://en.wikipedia.org/wiki/C_preprocessor – MByD