Präprozessor

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

Präprozessor

Beitrag von SeriK00 » Mo Jul 13, 2009 8:12 am

Ich habe eine Frage zum folgendem Präprozessoranweisungen:

Code: Alles auswählen

#ifndef __COM_H__
#define __COM_H__

    Code

#endif
Was wird den hier gemacht?

Also falls ein com.h nicht defeniert ist, dann wird esdefiniert und der code zwischen define und endif ausgeführt.

Aber wenn die Datei nicht com.h heißt, dann findet er diese sowieso nicht.

Kann mir jemand erklären wie sich der Pärprozessor verhält?

Vielen Dank im Voraus.
Windows XP Prof
Visual Studion 2005
Keil µVision 3

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Präprozessor

Beitrag von Xin » Mo Jul 13, 2009 10:27 am

Dies ist die übliche Technik um das mehrfache Einbinden von Headern zu vermeiden.

Der Code (welcher ausschließlich aus Deklarationen bestehen sollte!), wird dann ausgeführt, wenn __COM_H__ nicht definiert wird.
Es wird __COM_H__ definiert und beispielsweise struct Example {...}.

Bindest Du den Header nun nochmals von einem anderen Header ein, so würde struct Example {...} ein zweites Mal deklariert, was zu einer Fehlermeldung führt, weil struct Example ist dem Compiler ja bereits bekannt.
Durch den Präprozessor wird das abgefangen: Da __COM_H__ bereits definiert ist, wird alles bis #endif ignoriert, struct Example {...} wird also beim 2. Mal lesen ignoriert => keine doppelte Deklaration => kein Fehler.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten