Syntax

Dieses Dokument beschreibt knapp, was in C legal ist. Was ethisch richtig ist, steht im Programmierstil.

Datentypen

Primitive Typen

Speicher-
klasse
Zugriff Vorzeichen Größe Typ Bits Beschreibung
auto
register
extern
static
thread_local
const
volatile
void - Anonymer Typ
bool FIXME Wahrheitswert
signed
unsigned
char 8 Zeichencode
short
long
int 16/32/64 Ganzzahl
double 64/80 Gleitkommazahl
float 32 Gleitkommazahl

Speicherklasse

auto
Variable auf dem Stapelspeicher ablegen (Standard für lokale Variablen und Parameter).
register
Variable wenn möglich im Prozessorregister halten.
Wird normalerweise ignoriert, besser auf Optimierung des Compilers verlassen.
extern
Funktion oder globale Variable wird in einer anderen Übersetzungseinheit definiert.
static
Variable im statischen Programmspeicher ablegen.
Funktion oder globale Variable ist nur in dieser Übersetzungseinheit sichtbar.
[C++] Klassen-Methode, kann ohne Exemplar aufgerufen werden.
thread_local
Variable im statischen Threadspeicher ablegen.
Variable wird vor Beginn des Threads initialisiert.

Zugriff

const
Variable ist unveränderlich.
[C++] Methode verändert nicht den Zustand des Exemplars.
volatile
Variable kann sich spontan ändern, Optimierungen bitte deaktivieren.

Vorzeichen

signed
Vorzeichenbehaftete Ganzzahl
unsigned
Vorzeichenlos Ganzzahl

Größe/Genauigkeit

short
Ganz- oder Gleitkommazahl mit minimaler Genauigkeit
long
Ganz- oder Gleitkommazahl mit maximaler Genauigkeit

Zusammengesetzte Typen

enum
Aufzählung
union
Alternative mit überlappenden Mitgliedern
struct
Klasse mit standardmäßig öffentlichen Mitgliedern in C++
enum days { sunday, monday, tuesday, wednesday, thursday, friday, saturday };

union converter
{
  int    x;
  float  y;
};

struct point
{
  double x;
  double y;
};

Kontrollstrukturen

Verzweigung
if (condition) { statements } else { statements }
Ternärer Operator
condition ? expression : expression
Mehrfachverzweigung
switch (value) { case label: statements; break; default: statements; break; }
Schleife mit Abbruchbedingung
while (condition) { statements }
do { statements } while (condition);
Schleife mit Initialisierung, Abbruchbedingung und Inkrement
for (statement; condition; statement) { statements }
Aktuellen Schleifendurchlauf beenden
continue;
Schleife verlassen
break;
Unbedingter Sprung
goto label;
Rücksprung aus Funktion
return expression;
Anweisungen in Maschinencode einbetten
asm { instructions }

Funktionen

inline
Rumpf expandieren. Lieber auf Compiler-Optimierungen verlassen.
type identifier (arguments)
{
  statements
  return expression;
}

Funktionszeiger

Deklaration, zum Beispiel als Argument einer Funktion
type (* identifier) (arguments);
Array von Funktionszeigern
type (* identifier[size]) (arguments);