2009-07-21 10 views
1

Ich bin neu in C, und ich unterhalte Someones Code. Ich habe das in der Header-Datei gefunden. Ich kann verstehen, dass, wenn die Quelle in den Fenstern kompiliert wird, sie in die if-Anweisung eingeht, sonst wird der else-Befehl in die else-Anweisung aufgenommen, wenn der Code auf einem Linux kompiliert wird. Korrigiere mich, wenn ich falsch liege.#ifdef #else #endif Makro Frage

Die Frage ist jedoch, warum # (Hash) vor allen Include-Headern verwendet wird?

Vielen Dank für Ihre Anregungen,

#ifdef WIN32 
# include <conio.h> 
# include <process.h> 
# include <stdlib.h> 
# include <string.h> 
#else 
# include <unistd.h> 
# include <termio.h> 
# include <sys/types.h> 
# include <sys/stat.h> 
# include <fcntl.h> 
#endif 

Antwort

6

#include ist so, wie Sie Dateien in C enthalten

Sie könnten durch die Räume zwischen der # verwechselt werden und die umfassen.

Aber sie sind nicht wichtig. Diese Zeilen sind immer noch #include.

+0

Ja, das war es. Ich war verwirrt von den Leerzeichen zwischen dem # und dem Include. Vielen Dank. – ant2009

3

Da "#include" ist die Syntax für den Präprozessor sagen einen Header enthalten. Die Leerzeichen nach dem Pfund sind nur zum Formatieren da und sind nicht unbedingt notwendig.

8

Der Hash (#) zeigt eine Präprozessordirektive an. Der Präprozessor läuft vor der Kompilierung über den Code und macht die Dinge abhängig von allen Zeilen, die mit "#" beginnen. Die Anweisung "#include filename.h" kopiert im Wesentlichen den gesamten Inhalt von filename.h und fügt ihn dort ein, wo die Zeile "#include filename.h" war.

3

Die # Linien nicht durch den C-Compiler selbst tatsächlich behandelt werden, sondern durch eine Präprozessor, die in der Zusammenstellung als Pipeline frühzeitig ausgeführt wird. Das "#" ist, wie es weiß, für welche Linien es verantwortlich ist.

Derselbe Präprozessor kann auch in anderen Kontexten verwendet werden.

Der Präprozessor kann nicht nur Auswertung des Ausdrucks tun, wie sie in den #if und #ifdef Klauseln, aber es kann auch offen andere Dateien und fügen Sie sie #include verwenden und sogar Textersetzung mit #define Klauseln tun. Weitere Informationen finden Sie in der Wikipedia entry on the C preprocessor.

#include ist anders als, sagen wir, die VB.Net Imports Anweisung oder die C# using Anweisung. Diese machen Referenzen zu anderen Klassen, aber #include fügt tatsächlich den Text der enthaltenen Datei an dieser Stelle in der Quelldatei ein. Und es kann rekursiv agieren, so dass die eingeschlossenen Dateien sich selbst noch andere #include können.

1

include, ifdef usw. Sind alle Präprozessordirektiven, so dass sie muss haben das Pfund (oder Hash) Zeichen vor ihnen. Der Programmierer, der diesen Code schrieb, ordnete einfach alle diese # Zeichen auf der linken Seite an, um Code sauberer zu machen (seiner Meinung nach).

cplusplus.com hat eine gute overview der Präprozessordirektiven.