C — Änderungen 4269 → 4777

Zeile 1: Zeile 1:
−
C ist eine bekannte ältere Programmiersprache. Sie verfolgt das Ziel bei vergleichbarer Ausführungsgeschwindigkeit plattformunabhängiger und abstrakter als [[Assembler]] zu sein. Direkte Weiterentwicklung von C ist [[C++]].
+
C ist eine bekannte, ältere Programmiersprache. Sie verfolgt das Ziel, bei vergleichbarer Ausführungsgeschwindigkeit plattformunabhängiger und abstrakter als [[Assembler]] zu sein. Direkte Weiterentwicklung von C ist [[C++]].
 
{{Vorlage:Sprache
 
{{Vorlage:Sprache
 
|Name = C
 
|Name = C
Zeile 10: Zeile 10:
  
 
== Kernelprogrammierung mit C ==
 
== Kernelprogrammierung mit C ==
−
Da man mit C sehr hardwarenah programmieren kann, eignet sich die Sprache zur Programmierung eines Kernels. Es ist sogar die überwiegende Anzahl der Betriebssystemkernel in C geschrieben. Für andere Bereiche ist C jedoch nicht sonderlich geeignet: beispielsweise für einen Bootsektor. Empfehlenswert ist - wie bei jeder anderen Sprache, die im Bereich der Kernelprogrammierung verwendet werden soll - ein Compiler, der Inlineassembler unterstützt. Hierfür eignet sich der [[gcc]].
+
Da man mit C sehr hardwarenah programmieren kann, eignet sich die Sprache zur Programmierung eines Kernels. Es ist sogar die überwiegende Anzahl der Betriebssystemkernel in C geschrieben. Für andere Bereiche ist C jedoch nicht sonderlich geeignet, um Beispiel für einen Bootsektor. Empfehlenswert ist – wie bei jeder anderen Sprache, die im Bereich der Kernelprogrammierung verwendet werden soll – ein Compiler, der Inlineassembler unterstützt. Hierfür eignet sich der [[gcc]].
 
Für Einsteiger gibt es ein [http://www.cheebi.de/c-kernel-tutorial.pdf Tutorial], welches beschreibt, wie man in den [[Protected Mode]] schaltet und in C geschriebenen Code ausführt.
 
Für Einsteiger gibt es ein [http://www.cheebi.de/c-kernel-tutorial.pdf Tutorial], welches beschreibt, wie man in den [[Protected Mode]] schaltet und in C geschriebenen Code ausführt.
  
Zeile 17: Zeile 17:
 
Während es möglich ist, den allergrößten Teil des Kernels in C zu schreiben, sind für einige wenige Aufgaben nach wie vor einige Zeilen Assemblercode notwendig. Es gibt dabei im Wesentlichen zwei Ansätze:
 
Während es möglich ist, den allergrößten Teil des Kernels in C zu schreiben, sind für einige wenige Aufgaben nach wie vor einige Zeilen Assemblercode notwendig. Es gibt dabei im Wesentlichen zwei Ansätze:
  
−
* <p>'''Inline-Assembler''': Assemblercode wird direkt in den C-Code eingebettet. Die konkrete Syntax dafür unterscheidet sich von Compiler zu Compiler, im Allgemeinen wird der Assemblercode durch das Schlüsselwort asm eingeleitet. Ein Vorteil dieser Methode ist, dass ein direkter Zugriff auch auf lokale C-Variablen möglich ist. Sie eignet sich daher für sehr kleine Codestücke besonders gut.</p><p>Siehe auch [[Inline-Assembler mit GCC]]</p>
+
* <p>'''Inline-Assembler''': Assemblercode wird direkt in den C-Code eingebettet. Die konkrete Syntax dafür unterscheidet sich von Compiler zu Compiler, im Allgemeinen wird der Assemblercode durch das Schlüsselwort ''asm'' eingeleitet. Ein Vorteil dieser Methode ist, dass ein direkter Zugriff auch auf lokale C-Variablen möglich ist. Sie eignet sich daher für sehr kleine Codestücke besonders gut.</p><p>Siehe auch [[Inline-Assembler mit GCC]]</p>
 
* '''Externe Assemblerdatei''': Der Assemblercode wird in eine eigene Datei ausgelagert und vom C-Code als eigenständige Funktion aufgerufen. Die Übergabe von Parametern und des Rückgabewerts wird im Artikel [[Aufrufkonventionen]] beschrieben.
 
* '''Externe Assemblerdatei''': Der Assemblercode wird in eine eigene Datei ausgelagert und vom C-Code als eigenständige Funktion aufgerufen. Die Übergabe von Parametern und des Rückgabewerts wird im Artikel [[Aufrufkonventionen]] beschrieben.
  
 
=== Zeiger in C ===
 
=== Zeiger in C ===
−
Zeiger sind einzigartig in C. Mit Zeiger kann wie bei Assembler auf den Arbeitsspeicher direkt zugreifen.  
+
Zeiger sind einzigartig in C. Mit Zeigern kann man wie bei Assembler direkt auf den Arbeitsspeicher zugreifen. (Allerdings nicht auf Register)
−
(Aber nicht auf Register)
+
Folgender Beispielcode verdeutlicht dies:
−
Folgender Beispielcode verdeutlich dies:
 
 
  /* Standardfunktionen für die Shell */
 
  /* Standardfunktionen für die Shell */
 
  /***********************************************************************************
 
  /***********************************************************************************
−
  * Funktion Oneletter: Zeigt ein Buchstaben an einer bestimmten Posizion
+
  * Funktion Oneletter: Zeigt ein Buchstaben an einer bestimmten Position
 
  * Groundcolour: Vordergrundfarbe
 
  * Groundcolour: Vordergrundfarbe
 
  * Backcolour: Hintergrundfarbe
 
  * Backcolour: Hintergrundfarbe
Zeile 60: Zeile 59:
 
Die Zeile 3 beinhaltet einen Zeiger, der für die Textausgabe essentiell ist. Dieser Zeiger kann erhöht werden(Zeile 18) oder
 
Die Zeile 3 beinhaltet einen Zeiger, der für die Textausgabe essentiell ist. Dieser Zeiger kann erhöht werden(Zeile 18) oder
 
auf dem zeigende Wert verändert werden(Zeile 19).<br>
 
auf dem zeigende Wert verändert werden(Zeile 19).<br>
−
Bei '''sehr''' fortgeschrittenen Betriebsystemen sollte jedoch auch ein Aspekt auf die Sicherheit getan werden(Nur nötig bei Möglichkeit zum Internet)
+
Bei '''sehr''' fortgeschrittenen Betriebsystemen sollte jedoch auch ein Aspekt auf die Sicherheit getan werden. (Nur nötig bei Netzwerkfähigkeit)
 +
 
 
== Bekannte C-Compiler ==
 
== Bekannte C-Compiler ==
−
 
 
* gcc aus der [http://gcc.gnu.org/ GNU Compiler Collection]
 
* gcc aus der [http://gcc.gnu.org/ GNU Compiler Collection]
 
* [http://bellard.org/tcc/ tcc] (Tiny C Compiler)
 
* [http://bellard.org/tcc/ tcc] (Tiny C Compiler)
Zeile 68: Zeile 67:
  
 
== Weblinks ==
 
== Weblinks ==
−
* [http://openbook.galileocomputing.de/c_von_a_bis_z/c_000Vorwort_000.htm#Xxx999266 Algemeines C-Tutorial]
+
* [http://openbook.galileocomputing.de/c_von_a_bis_z/c_000Vorwort_000.htm#Xxx999266 Allgemeines C-Tutorial]
 
* [http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf Draft des C Standards]
 
* [http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf Draft des C Standards]
 
* [http://www.c-howto.de/ C-Tutorial]
 
* [http://www.c-howto.de/ C-Tutorial]