mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-22 06:13:32 +02:00
Fixed some small typos in german translation
This commit is contained in:
@@ -13,11 +13,11 @@ Programmierer je brauchen werden. Die Geschwindigkeit von C ist enorm, allerding
|
|||||||
muss man sich stets der maneullen Speicherverwaltung bewusst sein.
|
muss man sich stets der maneullen Speicherverwaltung bewusst sein.
|
||||||
|
|
||||||
|
|
||||||
> **Über Compiler Flags**
|
> **Über Compiler Optionen**
|
||||||
>
|
>
|
||||||
> Standardmässig sind `gcc` und `clang` ziemlich ruhig bezüglich Warnungen und
|
> Standardmässig sind `gcc` und `clang` ziemlich ruhig bezüglich Warnungen und
|
||||||
> Fehlern, obwohl dies sehr nützliche Informationen sein können. Es wird
|
> Fehlern, obwohl dies sehr nützliche Informationen sein können. Es wird
|
||||||
> empfohlen, strengere Compiler Flags zu verwenden. Hier sind einige empfohlene
|
> empfohlen, strengere Compiler Optionen zu verwenden. Hier sind einige empfohlene
|
||||||
> Standards:
|
> Standards:
|
||||||
> `-Wall -Wextra -Werror -O2 -std=c99 -pedantic`
|
> `-Wall -Wextra -Werror -O2 -std=c99 -pedantic`
|
||||||
>
|
>
|
||||||
@@ -33,7 +33,7 @@ mehrzeilige Kommentare sehen so aus. Diese funktionieren auch in C89
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
mehrzeilige Kommentare können nicht verschaltelt werden /* Sei Vorsichtig! */ // Kommentar endet auf dieser Linie ...
|
mehrzeilige Kommentare können nicht verschachtelt werden /* Sei Vorsichtig! */ // Kommentar endet auf dieser Linie ...
|
||||||
*/ // ... nicht bei dieser!
|
*/ // ... nicht bei dieser!
|
||||||
|
|
||||||
// Konstanten: #define <keyword>
|
// Konstanten: #define <keyword>
|
||||||
@@ -89,7 +89,7 @@ int main (int argc, char** argv){
|
|||||||
// Typen
|
// Typen
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
// Alle Variable müssen am Anfang des jetzigen Blocks deklariert werden.
|
// Alle Variablen müssen am Anfang des jetzigen Blocks deklariert werden.
|
||||||
// Wir deklarieren die Variablen dynamisch im Code um die Lesbarkeit im
|
// Wir deklarieren die Variablen dynamisch im Code um die Lesbarkeit im
|
||||||
// Tutorial zu verbessern.
|
// Tutorial zu verbessern.
|
||||||
// C99-Konforme Compiler erlauben die Variablendeklaration an dem Punkt, an
|
// C99-Konforme Compiler erlauben die Variablendeklaration an dem Punkt, an
|
||||||
@@ -121,7 +121,7 @@ int main (int argc, char** argv){
|
|||||||
unsigned int ux_int;
|
unsigned int ux_int;
|
||||||
unsigned long long ux_long_long;
|
unsigned long long ux_long_long;
|
||||||
|
|
||||||
// chars innerhalb von einfachen Anführungszeichen sind Integers im
|
// Zeichen innerhalb von einfachen Anführungszeichen sind Integers im
|
||||||
// Maschinenzeichensatz
|
// Maschinenzeichensatz
|
||||||
'0'; // => 48 im ASCII-Zeichensatz
|
'0'; // => 48 im ASCII-Zeichensatz
|
||||||
'A'; // => 65 im ASCII-Zeichensatz
|
'A'; // => 65 im ASCII-Zeichensatz
|
||||||
@@ -187,7 +187,7 @@ int main (int argc, char** argv){
|
|||||||
// Strings sind lediglich Arrays von `chars`, welche mit einem Null-Byte
|
// Strings sind lediglich Arrays von `chars`, welche mit einem Null-Byte
|
||||||
// (0x00) beendet werden. In Strings wird das Nullbyte durch das Zeichen \0
|
// (0x00) beendet werden. In Strings wird das Nullbyte durch das Zeichen \0
|
||||||
// repräsentiert. Wir müssen das Null-Byte nicht angeben in String-Literalen;
|
// repräsentiert. Wir müssen das Null-Byte nicht angeben in String-Literalen;
|
||||||
// Der Compiler fügt es am Ende des Array automatisch hinzu.
|
// der Compiler fügt es am Ende des Array automatisch hinzu.
|
||||||
char ein_string[20] = "Das ist ein String";
|
char ein_string[20] = "Das ist ein String";
|
||||||
printf("%s\n", ein_string); // %s formattiert einen String
|
printf("%s\n", ein_string); // %s formattiert einen String
|
||||||
|
|
||||||
@@ -222,9 +222,9 @@ int main (int argc, char** argv){
|
|||||||
i1 + i2; // => 3
|
i1 + i2; // => 3
|
||||||
i2 - i1; // => 1
|
i2 - i1; // => 1
|
||||||
i2 * i1; // => 2
|
i2 * i1; // => 2
|
||||||
i1 / i2; // 0 (0.5, aber abgeschnitten, da es int sind.
|
i1 / i2; // 0 (0.5, aber abgeschnitten, da es int sind.)
|
||||||
|
|
||||||
// Man muss mindestens ein Integer to einen float konvertieren, damit man als
|
// Man muss mindestens ein Integer zu einen float konvertieren, damit man als
|
||||||
// Resultat eine Gleitkommazahl erhält.
|
// Resultat eine Gleitkommazahl erhält.
|
||||||
(float)i1 / i2; // => 0.5f
|
(float)i1 / i2; // => 0.5f
|
||||||
i1 / (double)i2; // => 0.5 // das gleiche mit dem Typ `double`
|
i1 / (double)i2; // => 0.5 // das gleiche mit dem Typ `double`
|
||||||
@@ -245,7 +245,7 @@ int main (int argc, char** argv){
|
|||||||
2 <= 2; // => 1
|
2 <= 2; // => 1
|
||||||
2 >= 2; // => 1
|
2 >= 2; // => 1
|
||||||
|
|
||||||
// C ist nicht Python - Vergleiche können nicht verkettet werden.
|
// C ist nicht Python - Vergleiche können nicht einfach verkettet werden.
|
||||||
// Warnung: die folgende Zeile wird kompilieren, aber es bedeutet `(0 < a) < 2`.
|
// Warnung: die folgende Zeile wird kompilieren, aber es bedeutet `(0 < a) < 2`.
|
||||||
// Dieser Ausdruck ist immer wahr, weil (0 < a) kann entweder 1 oder 0 sein.
|
// Dieser Ausdruck ist immer wahr, weil (0 < a) kann entweder 1 oder 0 sein.
|
||||||
// In diesem Falle ist es 1, weil (0 < 1).
|
// In diesem Falle ist es 1, weil (0 < 1).
|
||||||
@@ -278,8 +278,8 @@ int main (int argc, char** argv){
|
|||||||
0x0F & 0xF0; // => 0x00 (Bitweises UND)
|
0x0F & 0xF0; // => 0x00 (Bitweises UND)
|
||||||
0x0F | 0xF0; // => 0xFF (Bitweises ODER)
|
0x0F | 0xF0; // => 0xFF (Bitweises ODER)
|
||||||
0x04 ^ 0x0F; // => 0x0B (Bitweises XOR)
|
0x04 ^ 0x0F; // => 0x0B (Bitweises XOR)
|
||||||
0x01 << 1; // => 0x02 (Bitweises Linksshift (left shift) (um 1))
|
0x01 << 1; // => 0x02 (Bitweises Linksverschiebung (left shift) (um 1))
|
||||||
0x02 >> 1; // => 0x01 (Bitweises Rechtsshift (right shift) (um 1))
|
0x02 >> 1; // => 0x01 (Bitweises Rechtsverschiebung (right shift) (um 1))
|
||||||
|
|
||||||
// Sei vorsichtig beim Shift mit vorzeichenbehafteten Integern - folgende Ausdrücke sind nicht definiert:
|
// Sei vorsichtig beim Shift mit vorzeichenbehafteten Integern - folgende Ausdrücke sind nicht definiert:
|
||||||
// - Verschiebung in das Vorzeichenbit (int a = 1 << 31)
|
// - Verschiebung in das Vorzeichenbit (int a = 1 << 31)
|
||||||
@@ -325,18 +325,18 @@ int main (int argc, char** argv){
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
// **Merke**
|
// **Merke**
|
||||||
// Schleifen und Funktionen müssen einen Body haben. Wenn kein Body gebraucht
|
// Schleifen und Funktionen müssen einen Rumpf haben. Wenn kein Rumpf gebraucht
|
||||||
// wird, kann folgendes gemacht werden:
|
// wird, kann folgendes gemacht werden:
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i <= 5; i++){
|
for (i = 0; i <= 5; i++){
|
||||||
; // Semikolon wird als Body behandelt (Null-Anweisung)
|
; // Semikolon wird als Rumpf behandelt (Null-Anweisung)
|
||||||
}
|
}
|
||||||
// Alternativ kann auch folgendes geschrieben werden:
|
// Alternativ kann auch folgendes geschrieben werden:
|
||||||
for (i = 0; i <= 5; i++);
|
for (i = 0; i <= 5; i++);
|
||||||
|
|
||||||
// Verzweigungen mit mehreren Möglichkeiten: `switch()`
|
// Verzweigungen mit mehreren Möglichkeiten: `switch()`
|
||||||
switch (a){
|
switch (a){
|
||||||
case 0: //labels müssen integrale *konstante* Ausdrücke sein (z.B. Enums)
|
case 0: // Labels müssen integrale *konstante* Ausdrücke sein (z.B. Enums)
|
||||||
printf("Hey, 'a' ist gleich 0!\n");
|
printf("Hey, 'a' ist gleich 0!\n");
|
||||||
break; //Wenn du kein break einsetzt, so geht der Kontrollfluss durch die Labels
|
break; //Wenn du kein break einsetzt, so geht der Kontrollfluss durch die Labels
|
||||||
case 1:
|
case 1:
|
||||||
@@ -405,10 +405,10 @@ error:
|
|||||||
|
|
||||||
// In diesem Tutorial wird das deutsche Wort Zeiger nicht verwendet, da es
|
// In diesem Tutorial wird das deutsche Wort Zeiger nicht verwendet, da es
|
||||||
// bei einer weiteren Recherche einfacher ist, wenn man von Pointern ausgeht.
|
// bei einer weiteren Recherche einfacher ist, wenn man von Pointern ausgeht.
|
||||||
// Ausserdem ist der Begriff Pointer auf im deutschen Sprachgebrauch zu finden.
|
// Ausserdem ist der Begriff Pointer auch im deutschen Sprachgebrauch zu finden.
|
||||||
|
|
||||||
// Ein Pointer ist eine Variable, welche deklariert wurde, um eine Speicher-
|
// Ein Pointer ist eine Variable, welche deklariert wurde, um eine Speicher-
|
||||||
// Adresse zu speichern. Die Deklaration eines Pointers wird auch zeigen,
|
// adresse zu speichern. Die Deklaration eines Pointers wird auch zeigen,
|
||||||
// auf welche Art von Daten der Pointer zeigt. Man kann die Speicheradresse
|
// auf welche Art von Daten der Pointer zeigt. Man kann die Speicheradresse
|
||||||
// von Variablen abrufen und dann mit diesen herumspielen.
|
// von Variablen abrufen und dann mit diesen herumspielen.
|
||||||
|
|
||||||
@@ -461,7 +461,7 @@ error:
|
|||||||
// oder wenn das Array ein Stringliteral ist, welches gebraucht wird um ein
|
// oder wenn das Array ein Stringliteral ist, welches gebraucht wird um ein
|
||||||
// `char`-Array zu initialisieren.
|
// `char`-Array zu initialisieren.
|
||||||
char anderer_arr[] = "foobarbazquirk";
|
char anderer_arr[] = "foobarbazquirk";
|
||||||
// oder wenn es das Argument des des `sizeof` oder `alignof` Operators ist.
|
// oder wenn es das Argument des `sizeof` oder `alignof` Operators ist.
|
||||||
int dritter_array[10];
|
int dritter_array[10];
|
||||||
int *ptr = dritter_array; // gleich wie: `int *ptr = &arr[0]`
|
int *ptr = dritter_array; // gleich wie: `int *ptr = &arr[0]`
|
||||||
printf("%zu, %zu\n", sizeof(dritter_array), sizeof(ptr));
|
printf("%zu, %zu\n", sizeof(dritter_array), sizeof(ptr));
|
||||||
@@ -515,7 +515,7 @@ error:
|
|||||||
free(mein_ptr);
|
free(mein_ptr);
|
||||||
|
|
||||||
// Obwohl Strings normalerweise als Pointer-to-Char (Pointer zum ersten
|
// Obwohl Strings normalerweise als Pointer-to-Char (Pointer zum ersten
|
||||||
// Zeichen des Arrays) repräsentiert werden, sind Strings sind Arrays aus `char`s.
|
// Zeichen des Arrays) repräsentiert werden, sind Strings Arrays aus `char`s.
|
||||||
// Es ist eine gute Praxis, `const char *` zu verwenden, wenn man ein
|
// Es ist eine gute Praxis, `const char *` zu verwenden, wenn man ein
|
||||||
// String-Literal referenziert, da String-Literale nicht modifiziert werden
|
// String-Literal referenziert, da String-Literale nicht modifiziert werden
|
||||||
// sollten (z.B. "foo"[0] = 'a' ist ILLEGAL)
|
// sollten (z.B. "foo"[0] = 'a' ist ILLEGAL)
|
||||||
@@ -536,22 +536,22 @@ error:
|
|||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
// Syntax einer Funktionsdeklaration
|
// Syntax einer Funktionsdeklaration
|
||||||
// <rueckgabe_wert> <funktion_name>(<args>)
|
// <rueckgabe_wert> <funktions_name>(<args>)
|
||||||
|
|
||||||
int addiere_zwei_integer(int x1, int x2){
|
int addiere_zwei_integer(int x1, int x2){
|
||||||
return x1 + x2; // verwendet return, um einen Wert zurückzugeben
|
return x1 + x2; // verwendet return, um einen Wert zurückzugeben
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Funktionen werden auf Grund des Wertes aufgerufen (call-by-value). Wenn eine
|
Funktionen werden auf Grund des Wertes aufgerufen (call-by-value). Wenn eine
|
||||||
* Funktion aufgerufen wird, sind die Argumente Kopien der ursprüunglichen Werte
|
Funktion aufgerufen wird, sind die Argumente Kopien der ursprüunglichen Werte
|
||||||
* (ausgenommen Arrays). Alles, was man innerhalb einer Funktion mit den Werten
|
(ausgenommen Arrays). Alles, was man innerhalb einer Funktion mit den Werten
|
||||||
* macht, hat keinen Einfluss auf die Originalwerte als die Funktion aufgerufen
|
macht, hat keinen Einfluss auf die Originalwerte als die Funktion aufgerufen
|
||||||
* wurde
|
wurde
|
||||||
|
|
||||||
* Verwende Pointer, um den Originalinhalt zu bearbeiten.
|
Verwende Pointer, um den Originalinhalt zu bearbeiten.
|
||||||
|
|
||||||
* Beispiel:
|
Beispiel:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Eine `void`-Funktion gibt keinen Wert zurück
|
// Eine `void`-Funktion gibt keinen Wert zurück
|
||||||
@@ -561,7 +561,7 @@ void str_reverse(char *str_in){
|
|||||||
size_t laenge = strlen(str_in);
|
size_t laenge = strlen(str_in);
|
||||||
// `strlen()` ist ein Teil der C Standard-Bibliothek.
|
// `strlen()` ist ein Teil der C Standard-Bibliothek.
|
||||||
// Merke: Die Länge, welche von `strlen` zurückgegeben wird, ist ohne den
|
// Merke: Die Länge, welche von `strlen` zurückgegeben wird, ist ohne den
|
||||||
// Null-Byter Terminatur.
|
// Null-Byte Terminator.
|
||||||
for (ii = 0; i < laenge /2; ii++){ // in C99 kann man `ii` direkt hier deklarieren.
|
for (ii = 0; i < laenge /2; ii++){ // in C99 kann man `ii` direkt hier deklarieren.
|
||||||
tmp = str_in[ii];
|
tmp = str_in[ii];
|
||||||
str_in[ii] = str_in[laenge - ii - 1]; //#ii'tes Zeichen vom Ende her
|
str_in[ii] = str_in[laenge - ii - 1]; //#ii'tes Zeichen vom Ende her
|
||||||
@@ -572,9 +572,9 @@ void str_reverse(char *str_in){
|
|||||||
// verwendet werden kann.
|
// verwendet werden kann.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* char c[] = "Das ist ein Test";
|
char c[] = "Das ist ein Test";
|
||||||
* str_reverse(c);
|
str_reverse(c);
|
||||||
* printf("%s\n", c), => "tseT nie tsi saD"
|
printf("%s\n", c), => "tseT nie tsi saD"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Weil wir lediglich eine Variable zurückgeben können, kann zum Ändern mehrerer
|
// Weil wir lediglich eine Variable zurückgeben können, kann zum Ändern mehrerer
|
||||||
@@ -595,7 +595,7 @@ printf("Erste Zahl: %d\n Zweite Zahl: %d\n", erste_zahl, zweite_zahl);
|
|||||||
Wenn man Arrays betrachtet, so werden diese immer als Pointer übergeben. Auch
|
Wenn man Arrays betrachtet, so werden diese immer als Pointer übergeben. Auch
|
||||||
wenn die Arrays statisch alloziert werden (wie zum Beispiel `arr[10]`), werden
|
wenn die Arrays statisch alloziert werden (wie zum Beispiel `arr[10]`), werden
|
||||||
diese als Pointer zum ersten Element des Arrays übergeben.
|
diese als Pointer zum ersten Element des Arrays übergeben.
|
||||||
Auch hier soll noch einmal erwähnt werden, dass keinen Standard gibt, wie die
|
Auch hier soll noch einmal erwähnt werden, dass es keinen Standard gibt, wie die
|
||||||
Grösse eines dynamischen Arrays herausgefunden werden kann.
|
Grösse eines dynamischen Arrays herausgefunden werden kann.
|
||||||
*/
|
*/
|
||||||
// Die Grösse des Arrays muss unbedingt mitgegeben werden.
|
// Die Grösse des Arrays muss unbedingt mitgegeben werden.
|
||||||
@@ -616,7 +616,7 @@ ausgabe_int_array(mein_array, groesse);
|
|||||||
// man das Schlüsselwort `extern` verwenden.
|
// man das Schlüsselwort `extern` verwenden.
|
||||||
int i = 0;
|
int i = 0;
|
||||||
void test_funktion(){
|
void test_funktion(){
|
||||||
extern int i; //i braucht nun die externe Variable i
|
extern int i; // i braucht nun die externe Variable i
|
||||||
}
|
}
|
||||||
|
|
||||||
// Das Schlüsselwort `static` macht, dass eine Variable ausserhalb der Kompilier-
|
// Das Schlüsselwort `static` macht, dass eine Variable ausserhalb der Kompilier-
|
||||||
@@ -629,14 +629,14 @@ void test_funktion(){
|
|||||||
// Variablen mit 0 initialisiert, wenn sie nicht mit einem anderen Startwert
|
// Variablen mit 0 initialisiert, wenn sie nicht mit einem anderen Startwert
|
||||||
// initialisiert werden.
|
// initialisiert werden.
|
||||||
// Es ist auch möglich, Funktionen als statisch zu deklarieren, damit diese
|
// Es ist auch möglich, Funktionen als statisch zu deklarieren, damit diese
|
||||||
// `private` sind. Private heisst, dass sie nur in diesem Kontekt sichtbar sind.
|
// `private` sind. Privat heisst, dass sie nur in diesem Kontekt sichtbar sind.
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// Benutzerdefinierte Typen und Strukturen (Structs)
|
// Benutzerdefinierte Typen und Strukturen (Structs)
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
// `typdef`s können verwendet werden, um Typenaliase zu erstellen.
|
// `typedef`s können verwendet werden, um Typenaliase zu erstellen.
|
||||||
typedef int mein_typ;
|
typedef int mein_typ;
|
||||||
mein_typ meine_typ_var = 0;
|
mein_typ meine_typ_var = 0;
|
||||||
|
|
||||||
@@ -650,7 +650,7 @@ struct rechteck{
|
|||||||
// Allgemein ist es nicht so, dass folgender Ausdruck wahr ist.
|
// Allgemein ist es nicht so, dass folgender Ausdruck wahr ist.
|
||||||
// sizeof(struct rechteck) == sizeof(int) + sizeof(int)
|
// sizeof(struct rechteck) == sizeof(int) + sizeof(int)
|
||||||
// Dies ist so, weil potentiell ein Padding zwischen den Struktur-Inhalten
|
// Dies ist so, weil potentiell ein Padding zwischen den Struktur-Inhalten
|
||||||
// möglich ist). siehe [1]
|
// möglich ist). (siehe [1, Englisch])
|
||||||
|
|
||||||
void funktion_1(){
|
void funktion_1(){
|
||||||
struct rechteck mein_rechteck;
|
struct rechteck mein_rechteck;
|
||||||
@@ -669,7 +669,7 @@ void funktion_1(){
|
|||||||
mein_rechteck_ptr->hoehe = 10; // Das gleiche wie: (*mein_rechteck_ptr).hoehe = 10;
|
mein_rechteck_ptr->hoehe = 10; // Das gleiche wie: (*mein_rechteck_ptr).hoehe = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aus Bequemlichkeitsgründen ist es möglich einem `struct` ein `typedef`hinzuzufügen.
|
// Aus Bequemlichkeitsgründen ist es möglich einem `struct` ein `typedef` hinzuzufügen.
|
||||||
typedef struct rechteck recht;
|
typedef struct rechteck recht;
|
||||||
|
|
||||||
int flaeche(recht r){
|
int flaeche(recht r){
|
||||||
@@ -689,7 +689,7 @@ int flaecheptr(const recht *r){
|
|||||||
/*
|
/*
|
||||||
Zur Laufzeit sind Funktionen in einer Speicheradresse gespeichert.
|
Zur Laufzeit sind Funktionen in einer Speicheradresse gespeichert.
|
||||||
Funktionspointer sind wie normale Pointer (es wird einfach eine Speicheradresse
|
Funktionspointer sind wie normale Pointer (es wird einfach eine Speicheradresse
|
||||||
geseichert). Funktionspointer können verwendet werden, um Funktionen und
|
gespeichert). Funktionspointer können verwendet werden, um Funktionen und
|
||||||
Handler (oder Callback-Funktionen) direkt aufzurufen.
|
Handler (oder Callback-Funktionen) direkt aufzurufen.
|
||||||
Wie auch immer, die Syntax kann zu Beginn verwirrend wirken.
|
Wie auch immer, die Syntax kann zu Beginn verwirrend wirken.
|
||||||
|
|
||||||
@@ -725,8 +725,10 @@ typedef void (*mein_fnp_type)(char *);
|
|||||||
'\f'; // Neue Seite (new page (form feed))
|
'\f'; // Neue Seite (new page (form feed))
|
||||||
'\r'; // Wagenrücklauf (carriage return)
|
'\r'; // Wagenrücklauf (carriage return)
|
||||||
'\b'; // Backspace-Zeichen (backspace character)
|
'\b'; // Backspace-Zeichen (backspace character)
|
||||||
'\0'; // Null-Byte (NULL character). In C wird dieses Zeichen normalerweise am Ende eines Strings gesetzt.
|
'\0'; // Null-Byte (NULL character). In C wird dieses Zeichen normalerweise am
|
||||||
// Beispiel: Hallo\n\0. \0 wird per Konvention verwendet, um das Ende eines Strings zu kennzeichnen.
|
// Ende eines Strings gesetzt.
|
||||||
|
// Beispiel: Hallo\n\0. "\0" wird per Konvention verwendet, um das Ende
|
||||||
|
// eines Strings zu kennzeichnen.
|
||||||
'\\'; // Backslash (backslash)
|
'\\'; // Backslash (backslash)
|
||||||
'\?'; // Fragezeichen (question mark)
|
'\?'; // Fragezeichen (question mark)
|
||||||
'\''; // einfaches Anführungszeichen (single quote)
|
'\''; // einfaches Anführungszeichen (single quote)
|
||||||
@@ -736,20 +738,20 @@ typedef void (*mein_fnp_type)(char *);
|
|||||||
|
|
||||||
//Ausgabeformatierung
|
//Ausgabeformatierung
|
||||||
"%d"; // Integer
|
"%d"; // Integer
|
||||||
"%3d"; // integer mit einer minimalen Länge von drei Zeichen.
|
"%3d"; // Integer mit einer minimalen Länge von drei Zeichen.
|
||||||
"%s"; // String
|
"%s"; // String
|
||||||
"%f"; // Float
|
"%f"; // Gleitkommazahl (float)
|
||||||
"%ld"; // Long
|
"%ld"; // genauere Gleitkommazahl (long)
|
||||||
"%3.2f"; // Mindest drei Zeichen vor und drei nach dem Komma.
|
"%3.2f"; // Mindestens drei Zeichen vor und drei nach dem Komma.
|
||||||
"%7.4s"; // (Kann auch mit Strings gemacht werden)
|
"%7.4s"; // (Kann auch mit Strings gemacht werden)
|
||||||
"%c"; // Char
|
"%c"; // einzelnes Zeichen (char)
|
||||||
"%p"; // Pointer. Merke: man muss den Pointer zu void umwandeln, bevor `printf`funktioniert.
|
"%p"; // Pointer. Merke: man muss den Pointer zu void umwandeln, bevor `printf` funktioniert.
|
||||||
"%x"; // Hexadezimal
|
"%x"; // Hexadezimal
|
||||||
"%o"; // Oktalzahl
|
"%o"; // Oktalzahl
|
||||||
"%%"; // Gibt % aus
|
"%%"; // Gibt % aus
|
||||||
|
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
// Reihenfolge der Auswertung
|
// Reihenfolge der Auswertung von Operatoren
|
||||||
////////////////////////////////////////////////
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
//-------------------------------------------------------//
|
//-------------------------------------------------------//
|
||||||
@@ -780,7 +782,7 @@ typedef void (*mein_fnp_type)(char *);
|
|||||||
/*
|
/*
|
||||||
Header-Dateien sind ein wichtiger Teil von C, da sie eine Verbindung zwischen
|
Header-Dateien sind ein wichtiger Teil von C, da sie eine Verbindung zwischen
|
||||||
unterschiedlichen C-Quelldateien herstellen. Ausserdem vereinfachen Header-Dateien
|
unterschiedlichen C-Quelldateien herstellen. Ausserdem vereinfachen Header-Dateien
|
||||||
den Code und Definitionen, da diese in separaten Daten geschrieben werden können.
|
den Code und Definitionen, da diese in separaten Dateien geschrieben werden können.
|
||||||
|
|
||||||
Header-Dateien sind von der Syntax her ähnlich zu C-Quelldateien, allerdings haben
|
Header-Dateien sind von der Syntax her ähnlich zu C-Quelldateien, allerdings haben
|
||||||
die Header-Dateien die Dateiendung `.h`. Header-Dateien können im Quellcode mit
|
die Header-Dateien die Dateiendung `.h`. Header-Dateien können im Quellcode mit
|
||||||
@@ -811,7 +813,7 @@ befindet wie die C-Quelldatei.
|
|||||||
// wichtig, damit sichergestellt werden kann, dass a und b nicht unerwartet
|
// wichtig, damit sichergestellt werden kann, dass a und b nicht unerwartet
|
||||||
// erweitert werden. Zum Beispiel: `MUL (x,y) (x * y)`; Bei der Verwendung von
|
// erweitert werden. Zum Beispiel: `MUL (x,y) (x * y)`; Bei der Verwendung von
|
||||||
// `MUL(1 + 2, 3)` würde dies wie folgt erweitert werden: `(1 + 2 * 3)`, was zu
|
// `MUL(1 + 2, 3)` würde dies wie folgt erweitert werden: `(1 + 2 * 3)`, was zu
|
||||||
// einem falschen Resultat führen würde.
|
// einem falschen Resultat führt.
|
||||||
|
|
||||||
// Strukturen und Typendefinitionen können verwendet werden, um die Konsistenz
|
// Strukturen und Typendefinitionen können verwendet werden, um die Konsistenz
|
||||||
// zwischen unterschiedlichen Dateien beizubehalten.
|
// zwischen unterschiedlichen Dateien beizubehalten.
|
||||||
|
Reference in New Issue
Block a user