Forum: Compiler & IDEs elif = else if ?


von Se (Gast)


Lesenswert?

Warum gibt es 2 verschiedene Anweisungen für einen Befehl??

Gibts den "elif" auch ohne das # ? Also in einer .c Datei?

von johnny.m (Gast)


Lesenswert?

Die "Anweisungen mit #" sind Präprozessoranweisungen. Die haben nichts 
mit C-Anweisungen zu tun! "#if" und "if" machen was völlig anderes. Das 
steht aber in jedem C-Buch oder -Tutorial...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Se wrote:

> Warum gibt es 2 verschiedene Anweisungen für einen Befehl?

Gibt es doch gar nicht.  #else if geht nämlich nicht.

> Gibts den "elif" auch ohne das # ?

Nein.

> Also in einer .c Datei?

Wovon sprechen wir denn sonst, wenn nicht von C-Dateien?

von Se (Gast)


Lesenswert?

h Dateien.

Präprozessor Anweisungen stehen doch in h Dateien.

von Ulrich (Gast)


Lesenswert?

Die können sowohl in *.c als auch *.h oder *.txt oder einfach überall 
stehen.....

von Oliver (Gast)


Lesenswert?

>Präprozessor Anweisungen stehen doch in h Dateien.

Wenn die bei dir nur in .h-Dateien stehen, dann ist das bei dir so. Das 
ist allerdings nicht vorgeschrieben, und es gibt auch viele sinnvolle 
Anwendungen von Präprozessor-Anweisungen in .c-Dateien.

Also: C-Buch besorgen UND lesen.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Se wrote:
> h Dateien.
>
> Präprozessor Anweisungen stehen doch in h Dateien.

OK.
Langsam und zum mitdenken.

Der eigentliche C-Compiler kriegt Header Dateien normalerweise
niemals zu Gesicht.

Bevor der Compiler läuft, nimmt sich der Präprozessor den
Quelltext vor. Den präprozessor kann man sich wie einen
Texteditor vorstellen, der seine Kommandos perverser Weise
aus dem Text bezieht, den er bearbeitet. Alle Zeilen die
mit # beginnen sind Anweisungen an den Präprozessor.

zb. gibt es eine Anweisung
#include

Sie veranlasst, dass der Präprozessor die Zeile mit dem
Inhalt der Datei ersetzt.

Wenn du also hast

global.h
********
1
int a;

main.c
******
1
#include "global.h"
2
3
int main()
4
{
5
}

dann ersetzt der Präprozessor die #include Zeile mit dem Inhalt
von "global.h" und macht daraus
1
int a;
2
3
int main()
4
{
5
}

und erst dieses Zwischenergebnis wird dem eigentlichen C-Compiler
zum Frass vorgeworfen.

Was du in den h-Files oder den C-Files hast ist im Grunde
dem Präprozessor völlig egal. Wenn du willst kannst du auch
1
#include "test.bmp"

machen. Dann wird halt vom Präprozessor eine Bitmap Datei
an dieser Stelle hereingezogen. Ob das sinnvoll ist oder
nicht, interessiert den Präprozessor herzlich wenig. In
der Datei steht: den Inhalt der Datei "test.bmp" hier einsetzen,
und genau das macht der Präprozessor.

Daher ist aber auch eine Unterscheidung zwischen Header Files
und Source Files an dieser Stelle nicht sinnvoll, denn:
Der Compiler kriegt sie sowieso nie zu Gesicht.

Wenn du pervers bist, kannst du auch sowas machen

int.h
*****
1
int

main.h
******
1
main

Klammern.h
**********
1
()

Block.h
*******
{ }

und damit dann dein Programm schreiben:

main.c
1
#include "int.h"
2
#include "main.h"
3
#include "Klammern.h"
4
#include "Block.h"

Wenn du selbst mal Präprozessor spielst, und alle include
Zeilen durch den Inhalt der jeweiligen Dateien ersetzt,
dann kommt da raus
1
int
2
main
3
()
4
{ }

und das ist zweifellos ein gültiges C Program.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.