.
This commit is contained in:
parent
4035654f41
commit
a8ca938a9e
1 changed files with 49 additions and 2 deletions
|
@ -260,5 +260,52 @@ int main(){
|
|||
}
|
||||
#+END_SRC
|
||||
|
||||
*** Preprocessor Erklärung
|
||||
Der Präprozessor in C ist ein Teil des Kompilierungsvorgangs
|
||||
*** Was ist der Prä-Prozessor, wie wird er angesprochen und welche Aufgaben erledigt er?
|
||||
Der Präprozessor in C ist ein Teil des Kompilierungsvorgangs jedes C-Programms. Er übernimmt im wesentlichen drei Aufgaben:
|
||||
1. Macro Substitutionen: Alle Konstanten, die mit ~#define~ definiert wurden, werden textbasiert ersetzt. So wird zum Beispiel ~ENOMOM~, der Errorcode für wenn kein Speicher mehr verfügbar ist, durch die Zahl 12 ersetzt, vorrausgesetzt ~errno.h~ wurde inkludiert.
|
||||
2. Datei Inklusion: Alle aussagen die mit ~#include~ beginnen, werden ausgeführt, bedeutet die Header files werden direkt in den Source Code der Datei kopiert und dann wird weiter kompiliert.
|
||||
3. Konditionale Kompilation: Statements wie ~#ifdef~, ~#ifndef~, ~#if~, ~#else~ oder ~#endif~ ermöglicht Codesegmente, die nur kompiliert werden, wenn bestimmte Bedingungen erfüllt werden. Sie sind zum Beispiel Teil von Include guards oder werden benutzt um bestimmte Konfiguration bei der Kompilierung zu ermöglichen. Der Linux Kernel benutzt in ~include/linux/fs.h~ in seinem Inode struct z. B.
|
||||
#+BEGIN_SRC C
|
||||
#ifdef CONFIG_SECURITY
|
||||
void *i_security;
|
||||
#endif
|
||||
#+END_SRC
|
||||
Wenn in der Kernel Konfiguration also die erweiterte Sicherheit aktiviert wurde (z. B. als Teil von SELinux), wird damit in das Inode struct dieser Teil mit reinkompiliert, ansonsten nicht.
|
||||
4. Zeilenkontrolle: ~#line~, eine sehr selten genutzte Instruktion, erlaubt es, Zeilenzahl oder Dateinamen in der kompilierten Datei zu ändern. Das kann manchmal für debugging hilfreich sein.
|
||||
|
||||
Allgemein sprechen also alle Aussagen die mit ~#~ beginnen den Präprozessor an. Dieser macht dann, wie er Name schon sagt, vor der tatsächlichen Kompilierung Änderungen am Code, zum Beispiel werden Makros erweitert oder bestimmte Codesegmente werden entfernt oder hinzugefügt, Quellcode aus anderen Dateien wird in die Datei hinzugefügt oder es werden Anweisungen an den Compiler für debugging an den Compiler weitergegeben.
|
||||
|
||||
** Vorbereitungsaufgaben
|
||||
*** 1. Vorbereitungsaufgabe
|
||||
#+BEGIN_SRC C
|
||||
#include <stdio.h>
|
||||
|
||||
double berechne_gesamtpreis(double preis, double anzahl) {
|
||||
return preis*anzahl;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int id;
|
||||
char name[64];
|
||||
double preis;
|
||||
int anzahl;
|
||||
printf("**********************\n");
|
||||
printf("* WWS Produkteingabe *\n");
|
||||
printf("**********************\n");
|
||||
printf("ID: ");
|
||||
scanf("%d", &id);
|
||||
printf("Name: ");
|
||||
scanf("%s", &name);
|
||||
printf("Preis: ");
|
||||
scanf("%lf", &preis);
|
||||
printf("Anzahl: ");
|
||||
scanf("%d", &anzahl);
|
||||
printf("========================\n");
|
||||
printf("| %d |\n", id);
|
||||
printf("| Name: %s |\n", name);
|
||||
printf("| Einzelpreis: %lf |\n", preis);
|
||||
printf("| Anzahl: %d |\n", anzahl);
|
||||
printf("| Gesamtpreis: %lf |\n", berechne_gesamtpreis(preis, anzahl));
|
||||
return 0;
|
||||
}
|
||||
#+END_SRC
|
||||
|
|
Loading…
Reference in a new issue