1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-14 10:45:06 +02:00

Merge pull request #3861 from caminsha/de-de/c/fix_whitespace

[c/de-de] made a whitespace after { character
This commit is contained in:
Max Schumacher
2020-02-16 23:48:34 +01:00
committed by GitHub

View File

@@ -75,7 +75,7 @@ int add_two_ints(int x1, int x2); // Funktionsprototyp
// Der Einstiegspunkt deines Programms ist eine Funktion mit dem Namen main und // Der Einstiegspunkt deines Programms ist eine Funktion mit dem Namen main und
// einem Integer als Rückgabewert. // einem Integer als Rückgabewert.
int main(void){ int main(void) {
// dein Programm // dein Programm
} }
@@ -87,7 +87,7 @@ int main(void){
// Argumente beinhaltet. // Argumente beinhaltet.
// argv[0] = Name des Programms // argv[0] = Name des Programms
// argv[1] = erstes Argument usw. // argv[1] = erstes Argument usw.
int main (int argc, char** argv){ int main (int argc, char** argv) {
// Ausgabe mit Hilfe von printf (print formatted) // Ausgabe mit Hilfe von printf (print formatted)
// %d ist ein Integer. // %d ist ein Integer.
// \n steht für eine neue Zeile // \n steht für eine neue Zeile
@@ -303,19 +303,19 @@ int main (int argc, char** argv){
//////////////////////////////////////////////// ////////////////////////////////////////////////
// Kontrollstrukturen // Kontrollstrukturen
//////////////////////////////////////////////// ////////////////////////////////////////////////
if (0){ if (0) {
printf("Ich werde nie ausgeführt."); printf("Ich werde nie ausgeführt.");
} }
else if (0){ else if (0) {
printf("Ich werde auch nie ausgeführt."); printf("Ich werde auch nie ausgeführt.");
} }
else{ else {
printf("Ich gebe etwas aus."); printf("Ich gebe etwas aus.");
} }
// While-Schleifen existieren auch // While-Schleifen existieren auch
int ii = 0; int ii = 0;
while (ii < 10){ // JEDER Wert unter zehn ist wahr while (ii < 10) { // JEDER Wert unter zehn ist wahr
printf("%d, " ii++); //i++ inkrementiert ii NACHDEM der Wert gebraucht printf("%d, " ii++); //i++ inkrementiert ii NACHDEM der Wert gebraucht
// wurde. // wurde.
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " } // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
@@ -323,16 +323,16 @@ int main (int argc, char** argv){
printf("\n"); printf("\n");
int kk = 0; int kk = 0;
do{ do {
printf("%d, ", kk); printf("%d, ", kk);
}while(++kk < 10); //++kk inkrementiert kk BEVOR der Wert gebraucht wurde. } while(++kk < 10); //++kk inkrementiert kk BEVOR der Wert gebraucht wurde.
// => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
printf("\n"); printf("\n");
// In C gibt es auch for-Schleifen // In C gibt es auch for-Schleifen
int jj; int jj;
for (jj = 0; jj < 10; jj++){ for (jj = 0; jj < 10; jj++) {
printf("%d, ", jj); printf("%d, ", jj);
} // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " } // => gibt folgendes aus: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "
@@ -342,14 +342,14 @@ int main (int argc, char** argv){
// Schleifen und Funktionen müssen einen Rumpf haben. Wenn kein Rumpf 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 Rumpf 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 break; //Wenn du kein break einsetzt, so geht der Kontrollfluss
@@ -441,7 +441,7 @@ int main (int argc, char** argv){
int x_array[20]; // deklariert einen Array der Größe 20 (Größe kann int x_array[20]; // deklariert einen Array der Größe 20 (Größe kann
// nicht geändert werden.) // nicht geändert werden.)
int xx; int xx;
for (xx =0; xx < 20; xx++){ for (xx =0; xx < 20; xx++) {
x_array[xx] 20 -xx; x_array[xx] 20 -xx;
} // Initialisiere x_array zu 20, 19, 18, ... 2, 1 } // Initialisiere x_array zu 20, 19, 18, ... 2, 1
@@ -478,7 +478,7 @@ int main (int argc, char** argv){
// aus dem Heap - dies kann auf eingebetteten Systemen unterschiedlichen sein. // aus dem Heap - dies kann auf eingebetteten Systemen unterschiedlichen sein.
// Der C Standard sagt nichts darüber.) // Der C Standard sagt nichts darüber.)
int *my_ptr = malloc(sizeof(*my_ptr) * 20); int *my_ptr = malloc(sizeof(*my_ptr) * 20);
for (xx = 0; xx < 20; xx++){ for (xx = 0; xx < 20; xx++) {
*(my_ptr + xx) = 20 -xx; //my_ptr[xx] = 20-xx *(my_ptr + xx) = 20 -xx; //my_ptr[xx] = 20-xx
} // initialisiere Speicher zu 20, 19, 18, 17, ... 2, 1 (als `int`) } // initialisiere Speicher zu 20, 19, 18, 17, ... 2, 1 (als `int`)
@@ -497,7 +497,7 @@ int main (int argc, char** argv){
// Füge dem Array ein Element hinzu // Füge dem Array ein Element hinzu
size++; size++;
my_array = realloc(my_array, sizeof(int) *size); my_array = realloc(my_array, sizeof(int) *size);
if (my_array == NULL){ if (my_array == NULL) {
// Denke daran, realloc-Fehler zu prüfen // Denke daran, realloc-Fehler zu prüfen
return return
} }
@@ -538,7 +538,7 @@ int main (int argc, char** argv){
// Syntax einer Funktionsdeklaration // Syntax einer Funktionsdeklaration
// <rueckgabe_wert> <funktions_name>(<args>) // <rueckgabe_wert> <funktions_name>(<args>)
int add_two_ints(int x1, int x2){ int add_two_ints(int x1, int x2) {
return x1 + x2; // verwendet return, um einen Wert zurückzugeben return x1 + x2; // verwendet return, um einen Wert zurückzugeben
} }
@@ -555,14 +555,14 @@ Beispiel:
*/ */
// Eine `void`-Funktion gibt keinen Wert zurück // Eine `void`-Funktion gibt keinen Wert zurück
void str_reverse(char *str_in){ void str_reverse(char *str_in) {
char tmp; char tmp;
size_t ii = 0; size_t ii = 0;
size_t size = strlen(str_in); size_t size = 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-Byte Terminator. // Null-Byte Terminator.
for (ii = 0; i < size /2; ii++){ // in C99 kann man `ii` hier deklarieren. for (ii = 0; i < size /2; ii++) { // in C99 kann man `ii` hier deklarieren.
tmp = str_in[ii]; tmp = str_in[ii];
str_in[ii] = str_in[size - ii - 1]; //#ii'tes Zeichen vom Ende her str_in[ii] = str_in[size - ii - 1]; //#ii'tes Zeichen vom Ende her
str_in[size - ii- 1] = tmp; str_in[size - ii- 1] = tmp;
@@ -579,7 +579,7 @@ 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
// Variablen das Konzept call-by-reference verwendet werden. // Variablen das Konzept call-by-reference verwendet werden.
void swap_two_numbers(int *a, int *b){ void swap_two_numbers(int *a, int *b) {
int temp = *a; int temp = *a;
*a = *b; *a = *b;
*b = temp; *b = temp;
@@ -600,9 +600,9 @@ Größe eines dynamischen Arrays herausgefunden werden kann.
*/ */
// Die Größe des Arrays muss unbedingt mitgegeben werden. // Die Größe des Arrays muss unbedingt mitgegeben werden.
// Sonst hat die Funktion keine Ahnung wie groß das Array ist. // Sonst hat die Funktion keine Ahnung wie groß das Array ist.
void print_int_arrray(int *arr, size_t size){ void print_int_arrray(int *arr, size_t size) {
int i; int i;
for (i = 0; i < size; i++){ for (i = 0; i < size; i++) {
printf("arr[%d] ist %d\n", i, arr[i]); printf("arr[%d] ist %d\n", i, arr[i]);
} }
} }
@@ -615,7 +615,7 @@ print_int_array(my_array, size);
// Wenn man auf externe Variable (außerhalb der Funktion) referenziert, sollte // Wenn man auf externe Variable (außerhalb der Funktion) referenziert, sollte
// man das Schlüsselwort `extern` verwenden. // man das Schlüsselwort `extern` verwenden.
int i = 0; int i = 0;
void test_function(){ void test_function() {
extern int i; // i braucht nun die externe Variable i extern int i; // i braucht nun die externe Variable i
} }
@@ -643,7 +643,7 @@ my_type my_type_var = 0;
// Structs sind lediglich Sammlungen von Daten, die Inhalte werden // Structs sind lediglich Sammlungen von Daten, die Inhalte werden
// (in der Reihenfolge wie sie geschrieben wurden) sequentiell alloziert. // (in der Reihenfolge wie sie geschrieben wurden) sequentiell alloziert.
struct rectangle{ struct rectangle {
int width; int width;
int height; int height;
}; };
@@ -653,7 +653,7 @@ struct rectangle{
// 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, Englisch]) // möglich ist). (siehe [1, Englisch])
void function_1(){ void function_1() {
struct rectangle my_rectangle; struct rectangle my_rectangle;
// Greife auf Struct-Inhalte mit `.` zu. // Greife auf Struct-Inhalte mit `.` zu.
@@ -674,13 +674,13 @@ void function_1(){
// 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 rectangle rect; typedef struct rectangle rect;
int area(rect r){ int area(rect r) {
return r.width * r.height; return r.width * r.height;
} }
// Wenn du große Structs hast, kannst du diese mit dem Pointer kopieren, // Wenn du große Structs hast, kannst du diese mit dem Pointer kopieren,
// damit große Kopiervorgänge vermieden werden. // damit große Kopiervorgänge vermieden werden.
int area_ptr(const rect *r){ int area_ptr(const rect *r) {
return r->width * r->height; return r->width * r->height;
} }
@@ -697,7 +697,7 @@ Wie auch immer, die Syntax kann zu Beginn verwirrend wirken.
Zum Beispiel: Verwende str_reverse von einem Pointer Zum Beispiel: Verwende str_reverse von einem Pointer
*/ */
void str_reverse_through_pointer(char *str_in){ void str_reverse_through_pointer(char *str_in) {
// Definiere eine Funktionspointer-Variable, welche f genannt wird. // Definiere eine Funktionspointer-Variable, welche f genannt wird.
void (*f)(char *); // Signatur sollte genau der Funktion entsprechen. void (*f)(char *); // Signatur sollte genau der Funktion entsprechen.
f = &str_reverse; // weise die Adresse der wirklichen Funktion zu f = &str_reverse; // weise die Adresse der wirklichen Funktion zu
@@ -823,7 +823,7 @@ befindet wie die C-Quelldatei.
// 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.
typedef struct Node{ typedef struct Node {
int value; int value;
struct Node *next; struct Node *next;
}Node; }Node;