C-Programmierung für Einsteiger #1

Linux C-Programmierung für Einsteiger #1

Linux ist bekannt dafür, dass alle benötigten Entwicklungswerkzeuge für verschiedene Programmiersprachen (kostenlos) zur Verfügung stehen. In diesem Dokument gebe ich eine kleine Einführung in die C-Programmierung unter Linux.

Zunächst musst du sicherstellen, dass der C-Compiler aus der GNU Compiler Collection (GCC), das Devel-Paket der GNU libc (glibc-dev oder glibc-devel) und das Make-Kommando installiert ist. Wie man überprüft, ob ein bestimmtes Paket installiert ist oder wie Pakete unter den verschiedenen Distributionen installiert werden, entnimmst du am besten den jeweiligen Dokumenten ([DOC:START:86]Debian[DOC:END], [DOC:START:39]RPM[DOC:END]).

Nach Eingabe von "gcc" sollte jedenfalls "gcc: No input files" und nach Eingabe von "make" die folgende Fehlermeldung erscheinen:

make: *** No targets specified and no makefile found. Stop.

Fangen wir gleich mal an. Du öffnest einen Texteditor und speicherst den nachfolgenden Quellcode unter dem Dateinamen "hallowelt.c" ab.

 

/* Dateiname:   hallowelt.c
   Funktion:    Einfaches Programm, welches den Text
                "Hallo Welt!" auf dem Bildschirm ausgibt.
   Compilieren: gcc -o hallowelt hallowelt.c
   Ausführen:   ./hallowelt
*/

#include <stdio.h>

int main (int argc, char *argv[])
{
  printf("Hallo Welt!\n");
  return(0);
}

 

Damit wir möglichst schnell ein Ergebnis sehen, übersetzen wir den oben stehenden Quellcode in ein für den Computer verständliches Format. Unter Linux heißt dieses Binärformat [LFA:WIKI:Executable_and_Linking_Format]ELF[END:LFA]. Da wir für das Übersetzen einen Compiler verwenden, heißt dieser Vorgang auch compilieren oder eingedeutscht kompilieren. Unter dem Betriebssystem GNU/Linux hat sich der GNU C Compiler durchgesetzt.

gcc -o hallowelt hallowelt.c

Sind dabei keine Fehler aufgetreten, kann das Programm wie folgt gestartet werden:

./hallowelt

Das Ergebnis sollte die Ausgabe der Zeile "Hallo Welt!" sein.

Nun betrachten wir den Quellcode einmal näher. Alle Zeichen, die zwischen /* und */ stehen, sind Kommentare und werden ignoriert.

 

#include <stdio.h>

 

Diese Zeile weist den Compiler an, die Datei "stdio.h" einzubinden. Diese befindet sich unter Linux normalerweise im Verzeichnis "/usr/include/" und beinhaltet Funktionen zur Ein- und Ausgabe von Daten.

 

int main (int argc, char *argv[])
{

 

Die erste Zeile leitet das Hauptprogramm ("main") ein. Das Schlüsselwort "int" vor "main" besagt, dass die Funktion "main" einen Rückgabewert vom Typ Integer (Ganzzahl) haben muss. Die Angabe "int argc" speichert die Anzahl der mit dem Programmaufruf übergebenen Parameter. Die zweite Angabe "char *argv[]" enthält die Parameter in Zeichenkettenform (aneinandergekettete Einzelzeichen). Die "geschwungene Klammer auf" ("{") steht für den Beginn eines Anweisungsblocks.

printf("Hallo Welt!\n");

Die printf-Anweisung druckt Zeichen auf dem Bildschirm aus. In diesem Fall die Zeichenkette "Hallo Welt!" und einen Zeilenumbruch ("\n").

return(0);

Die return-Anweisung beendet die Funktion mit dem Rückgabewert 0. Da "main" die Hauptfunktion darstellt, wird das Programm beendet.

}

Die "geschwungene Klammer zu" ("}") beendet einen zuvor mit der "geschwungenen Klammer auf" geöffneten Anweisungsblock.

Die oben stehende Zeile zum Compilieren des Quellcodes ist nicht ganz korrekt. Denn normalerweise sind für das Erstellen eines ausführbaren Programms aus einem C-Quellcode zwei Schritte notwendig. Zunächst muss aus allen Quellcode-Dateien jeweils eine Objekt-Datei mit der Endung "*.o" erstellt werden. Dieser Vorgang heißt compilieren:

gcc -c hallowelt.c

Das Ergebnis ist eine Datei namens "hallowelt.o". Im zweiten Schritt wird aus dieser Objekt-Datei das fertige Programm erstellt. Dieser Vorgang heißt Linken und wird ebenfalls vom gcc ausgeführt:

gcc -o hallowelt hallowelt.o

Sinn der Sache ist der folgende: Hat man erstmal die Objekt-Dateien erstellt, kann der Linker mit entsprechenden Optionen dynamisch oder statisch gelinkte Programme oder sogar Shared Object Bibliotheken (Endung *.so) erzeugen.

Hast du auf dieser Seite alles verstanden, kannst du mit dem [DOC:START:180]zweiten Teil[DOC:END] fortfahren.

Artikelbewertung: 
No votes yet
War dieser Artikel hilfreich?