2010-07-30 10 views
5

Chcę zadać pytanie dotyczące celu C lub może być językiem C. Chcę zapytać, co jest sens następującego kodu #define? Czy to jest jak zadeklarować zmienną?Jaki jest sens #define w celu C?

#define kMountainNameString   @"name" 
#define kMountainHeightString   @"height" 
#define kMountainClimbedDateString  @"climbedDate" 

Odpowiedz

13

To proste makro podstawiania tekstu. Działa tak samo jak w C, C++.

Gdzie pojawia się kMountainNameString kompilator "wklei" @ "nazwa". Technicznie rzecz biorąc, występuje to przed kompilatorem za pomocą mechanizmu zwanego preprocesorem.

+2

Jest to preprocesor zastępujący. Kompilator nie zobaczy żadnych #defines. – codaddict

+0

Tak, wróć, kiedy (może jeszcze dzisiaj) preprocessing został wykonany przez oddzielne niezależne narzędzie. – seand

+0

dziękuję za całą odpowiedź. i chcę zapytać, jaki jest typ danych tych 3 elementów? – Questions

1

Preprocesor zamienia wszystkie pojawienia kMountainNameString @ „z nazwą” przed rozpoczęciem kompilacji.

5

#define jest dyrektywa preprocesora odziedziczone C, która przybiera formę

#define identifier value 

W ogóle, to jest używane do przekazania preprocesor zastąpić wszystkie wystąpienia identifier w kodzie z danym tekstem przed przekazaniem go na do kompilatora. Identyfikatory można również definiować bez wartości, które mają być używane jako flagi kompilatora, aby zapobiec wielu definicjom tych samych zmiennych lub rozgałęziać się na szczegółach maszyny, które nie ulegną zmianie podczas wykonywania. Na przykład, aby przejść inny kod kompilator oparty na architekturze procesora można zrobić coś takiego:

#ifdef INTEL86 
//some 32-bit code 
#else 
//some 64-bit code 
#endif 

Podczas przypisywania wartości w tych definicjach, to często dobry pomysł, aby otoczyć wartość z nawiasami, tak zachować je jako jedną całość, niezależnie od kontekstu, że istnieje w

Przykładowo #define FOO 3 + 7 ma inny wynik niż #define FOO (3 + 7) w wyniku następnej linii, z powodu kolejności operacji arytmetycznych.

a = 3 * FOO 

Zobacz this link więcej szczegółów dotyczących dyrektyw preprocesora w ogóle lub this link do informacji bardziej skoncentrowane na Objective C

0

#define jest dyrektywa preprocesora w C i C++ język.

Służy do definiowania makr preprocesora dla tekstów. #define służy do dokonywania zmian w całym pliku, w którym się znajduje.

#define <macro-name> <replacement-string>