Syntax

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

CodingTutorialC-Syntax

Los geht's mit unserem kleinen Crashkurs in C - auf euren ausdrücklichen Wunsch hin halt hier mit Niederschrieb (:wink:)

  • Im Gegensatz zu $SKRIPTSPRACHE ist in C eigentlich alles zu deklarieren, soll heißen, es reicht nicht, wenn du einer Variablen (einem Symbol) einen Wert zuweist.
  • Jede Variable bekommt auf diesem Weg einen Typ zugeordnet (zum Beispiel eben integer)
  • Eine Prozedur (Funktion, SUB, oder wie auch immer) hat ebenfalls immer einen Rückgabetyp (standardmäßig int) und muss deklariert und sollte dann definiert werden.
  • Die Ausführung eines Programms beginnt immer bei der Prozedur main
  • Diese Prozedur main muss immer einen Wert vom Typ int zurückgeben, das ist dann der Exitcode des Programms. Dieser kann an der Shell mit echo $? abgefragt werden und sollte im Falle des Erfolgs 0 sein - ansonsten irgendwas anderes ...

eine leere Funktion main (insofern ein Programm das gar nichts tut) sieht dann so aus:

int
main(void)
{
  return 0;
}
  • Rückgabetyp der Funktion ist int, siehe Zeile 1
  • Name der Prozedur ist main, wir wollen keine Argumente übergeben haben (Token void in der Argumenteliste)
  • Rückgabe (return) des Werts 0 (Erfolg)
  • für den C-Compiler ist jede Zeile am Semikolon ; zu ende
  • Whitespace zwischen den einzelnen Tokens interessieren nicht
  • Blöcke werden (analog $SKRIPTSPRACHE, zumindest den meisten) durch geschweifte Klammern (braces) bestimmt
  • ihr solltet möglichst von anfang an versuchen, euren Code gut lesbar anzuordnen (einrücken)
    • z.B. pro Klammernpaar zwei Zeichen einrücken
      • viele Editoren machen das auch gerne automatisch (emacs, vim, etc.)
    • nur ein Befehl pro Zeile
    • die Klammerpaare der Prozedurendefinitionen müssen immer in Spalte 0 stehen (Zeilenanfang), ansonsten gibt's Probleme mit einigen Lexern

Kommentare

Kommentare werden in C mit /* begonnen und */ beendet, diese Kommentare können auch mehrzeilig sein. Nur ein Kommentar im Kommentar selbst ist nicht möglich.

 /* Dieser Kommentar
  * ist mehrzeilig. Was zwischen
  * den Kommentaranfangs- und -endezeichen
  * geschrieben wird, ist dem Compiler egal
  */

 // C++ Kommentare (nur einzeilig) werden vom gcc zwar auch
 // in C-Code Dateien ignoriert, das machen aber nicht alle Compiler so


Operatoren, Wertzuweisung und Variablentypen

Variablentypen

Wie bereits auf der vorigen Seite erwähnt, muss jeder Variablen ein konkreter Typ zugewiesen werden (ein ANY oder VARIANT wie bei Visual Basic gibt's nicht) ...

char ein Zeichen (eigentlich eine Ganzzahl von 8 bit Länge)
int Ganzzahl (die Länge ist Systemabhängig, nämlich Wortgröße, auf IA32 sind's 32 Bit)
float Fließkommazahl
double Fließkommazahl doppelter Genauigkeit
  • wenn nicht anders angegeben, sind alle diese Variablen Vorzeichenbehaftet (signed)
  • wenn ein Variablentyp benötigt wird, der nur positive Zahlen aufnehmen kann, muss der Token unsigned vor die Typenangabe
  • die Variablen vom Typ int können mit short und long verkürzt bzw. verlängert werden (für den Anfang aber ehr irrelevant)

Um eine Variable alter vom Typ int ohne Vorzeichenbehaftung zu deklarieren, gehen wir nun wie folgt vor:

int
main(void)
{
  unsigned int alter;
  return 0;
}

Operatoren

nicht alle, aber mal die wichtigsten (einfachen)

= direkte Wertzuweisung
+ Addition
- Subtraktion
* Multiplikation
/ (ganzzahlige) Division (der Divisionsrest wird verworfen)
 % Modulo (Divisionsrest)
  • die Interpretation geschieht grundsätzlich Punkt vor Strich
  • Klammern werden ebenfalls berücksichtigt
  • ein Operator zur Potenzierung (bei Perl z.B. **) gibt's in C nicht
    • Achtung ^ ist ein binäres XOR, keine Potenzierung wie bei Visual Basic
/* Direkte Wertzuweisung */
alter = 21;

/* Addition */
alter = alter + 4;

/* oder sowas */
alter = (4 + 3) * 3;

/* die Addition und Zuweisung von oben 
 * kann auch so geschrieben werden */
alter += 4;


Standardbibliothek (glibc)

Die Programmiersprache C kommt erstmal nur mit den grundsätzlichen mathematischen Operatoren sowie Schleifenhandling etc. daher. Funktion zur Ausgabe/Eingabe von Daten, Verwaltung von Arbeitsspeicher, etc. geschehen immer im Rückgriff auf entsprechende Bibliotheken. Eine sehr gute Standardbibliothek ist die (GNU libc), die bereits auf den meisten Rechnern installiert sein dürfte :-)

Datenausgabe mit printf

printf steht eigentlich für print formatted und gibt eine mit Formatierungszeichen gespickte Zeichenfolge auf den Bildschirm aus. Wenn keine solchen Formatierungszeichen eingebaut werden, wird die Zeichenfolge einfach nur auf dem Standardausgabekanal ausgegeben.

Funktionsdeklaration:

int printf(const char *format, ...);
(siehe man 3 printf)

Hello World

hier ist es endlich, das Hello World Programm (:cool:)

#include<stdio.h>
int
main(void)
{
  printf("Hello World!\
");
  return 0;
}
  • das \

am Zeilenende steht für das ASCII-Zeichen 10 (Newline)

  • um das obenstehende Programm auszuführen, musst du dieses in eine Datei mit der Endung .c abspeichern, zum Beispiel hello.c und dann den GNU C Compiler bemühen: gcc hello.c
    • das Ergebnis wird in der Datei a.out gespeichert, diese kannst du nun mit ./a.out ausführen
    • um einen Namen für die Dateiausgabe festzulegen, gibt es den Parameter -o, z.B. gcc -o hello hello.c

Formatierte Ausgabe von Zahlen

Um den Wert einer Variablen alter auszugeben, existiert das Formatierungszeichen %d (decimal)

#include<stdio.h>
int
main(void)
{
  int alter = 21;
  printf("Ich bin %d Jahre alt.\
", alter);
  return 0;
}
  • entsprechend der Anzahl der im Formatstring vorhandenen Formatierungsbefehle (alle mit % beginnend) müssen weitere Argumente an printf übergeben werden
  • um ein Prozentzeichen auszugeben, ist im Formatstring %% anzugeben.