www.mikrocontroller.net

Forum: Compiler & IDEs elif = else if ?


Autor: Se (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum gibt es 2 verschiedene Anweisungen für einen Befehl??

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Se (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
h Dateien.

Präprozessor Anweisungen stehen doch in h Dateien.

Autor: Ulrich (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
********
int a;

main.c
******
#include "global.h"

int main()
{
}

dann ersetzt der Präprozessor die #include Zeile mit dem Inhalt
von "global.h" und macht daraus
int a;

int main()
{
}

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
#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
*****
int 

main.h
******
main 

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

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

und damit dann dein Programm schreiben:

main.c
#include "int.h"
#include "main.h"
#include "Klammern.h"
#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
int
main
()
{ }

und das ist zweifellos ein gültiges C Program.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.