2010-07-30 7 views
5

Ich möchte eine Frage über das Ziel-C stellen oder kann die C Sprache sein. Ich möchte fragen, was ist die Bedeutung des folgenden Codes von #define? Ist es wie eine Variable zu deklarieren?Was ist die Bedeutung von #define im Ziel C?

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

Antwort

13

Es ist ein einfaches Textersetzungsmakro. Funktioniert wie in C, C++.

Wenn kMountainNameString angezeigt wird, fügt der Compiler @ "name" ein. Technisch gesehen geschieht dies vor dem Compiler durch einen Mechanismus, der Präprozessor genannt wird.

+2

Es ist der Präprozessor, der die Substitution durchführt. Der Compiler sieht keine #defines. – codaddict

+0

yep weg zurück, als (vielleicht noch heute) Vorverarbeitung wurde von einem separaten unabhängigen Werkzeug getan. – seand

+0

danke für die Antwort. und ich möchte fragen, was ist der Datentyp dieser 3 Elemente? – Questions

1

Der Präprozessor alle Vorkommen von kMountainNameString mit @ "name" ersetzt vor dem Kompilieren beginnt.

5

#define ist eine Präprozessordirektive von C geerbt, die die Form

#define identifier value 

Im Allgemeinen nimmt, wird es verwendet, um die Präprozessor anweisen, alle Instanzen von identifier im Code mit dem angegebenen Text zu ersetzen, bevor es beim Passieren an den Compiler. Bezeichner können auch ohne Werte definiert werden, die als Compilerflags verwendet werden, um mehrere Definitionen derselben Variablen zu verhindern oder um auf Maschinendetails zu verzweigen, die sich während der Ausführung nicht ändern. Zum Beispiel anhand verschiedenen Code an den Compiler weitergeben der Architektur des Prozessors Sie so etwas wie tun könnte:

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

Bei der Zuordnung Werte in diesen Definitionen, ist es oft eine gute Idee, den Wert mit Klammer umgeben, um zu erhalten, als eine Einheit, unabhängig von dem Kontext, in sie existiert

zum Beispiel #define FOO 3 + 7 ein anderes Ergebnis als #define FOO (3 + 7) auf dem Ergebnis der folgenden Zeile hat, durch die Reihenfolge der Rechenoperationen.

a = 3 * FOO 

Siehe this link für weitere Details über Präprozessordirektiven im Allgemeinen oder this link Informationen stärker auf Objective C.

0

#define ist die Präprozessordirektive in C und C++ Sprache.

Es wird verwendet, um die Präprozessor-Makros für die Texte zu definieren. Die # define wird verwendet, um Ersetzungen in der gesamten Datei vorzunehmen, in der sie sich befindet.

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