C

veröffentlicht von gngn am Fr., 28.09.2018 - 03:11
#include <stdio.h>
int main() {
   printf("Hello, World!");
   return 0;
}

C ist eine Art "Grundsprache" für Unix und alle davon abstammenden Betriebssysteme (einschliesslich GNU/Linux).
Sehr viele andere Programmiersprachen haben sich bei C stark bedient.

Noch heute ist der Kern der grossen Betriebssysteme in C geschrieben:

  • Der Linux-Kernel ist praktisch komplett in C (kleinere Teile wie der Boot-Prozeß in Assembler. Darüberliegendes wie die grafischen Oberflächen sind in C++.
  • Die "tieferen" Teile aller Windows-Varianten sind nachwievor in C geschrieben, einige Teile in C++, die darüberliegenden wohl mehr und mehr in C#. Kleinere Teile sind direkt in Assembler geschrieben oder zumindest wurde der generierte Code nach-optimiert.
  • Apples OS ist in C, C++, Teile in Objective-C und Swift geschrieben.

Anfang der 1970er waren Rechner verglichen mit heute teuer, ergo selten und hatten doch arg begrenzten Rechenpower und -speicher.
Das mit C eng verbundene Betriebssystem Unix wurde auf einer PDP-7 entwickelt (zuerst in reinem Assembler) und nochmal dann in C auf einer PDP-11.

PDP-7
PDP-7, schick - aber erst mal nur 9 KB (erweiterbar auf 144 KB)

C wurde Anfang der 1970er in den Bell Laboratories1 von Dennis Ritchie, Brian W. Kernighan und anderen für die Arbeit am Betriebssystem Unix entwickelt.
C gilt als Kompromiss: nicht Maschine (Assembler) reden - aber noch nah dran zu sein.

In C weißt du um Speicheradressen und piekst auch gerne mal direkt im Speicher rum. Ein wichtiges Konzept dabei sind sogenannte "Zeiger" (engl. Pointer).
Bei "normalen" Variablen sind die gespeicherten Werte selber von Interesse - sowas wie die Zahl 42 oder das Zeichen "X").
Zeiger enthalten als eigentlichen Wert eine Speicheradresse. Der Speicher ist durchnummeriert (etwa wie ein Schrank mit ganz vielen kleinen Fächern,
auf denen vorne drauf die Adresse steht. An Adresse 700915 steht z.B. das Zeichen "H" und an Adresse 700916 das Zeichen "a", bei 700917 "l"
usw. mit "l", "l", "o". Über einen Zeiger kann ich dann auf das an dieser Adresse gespeicherte Zeichen zugreifen.
Viele (grade später entstandene) Sprachen verbergen die Adresse selber vor mir - in C kann ich damit rechnen. So kann ich z.B. den Wert des Zeigers
um 1 erhöhen, um auf das nachfolgende Zeichen zu verweisen. In einer solchen Speicheradresse kann natürlich auf wieder eine eine Adresse stehen usw.

C wird von einem Compiler .... TODO

Vor dem eigentlichen Übersetzen läuft der sogenannte Präprozessor (auch C-Precompiler).
Der Präprozessor nimmt nur reine Textersetzungen vor. Mit ihm können andere Dateien eingebunden werden (#include), ganze Textbausteine (sog, Makros) ersetzt werden oder auch Teile von der eigentlichen Übersetzung ausgeschlossen werden (#if).
Beispiel:

    #ifdef WIN32
    # include <windows.h>
    #else
    # include <unistd.h>
    #endif

Hier wird auf Windows-Systemen (WIN32 ist definiert) die Bibliothek windows.h eingebunden und auf allen anderen Systemen die Bibliothek unistd.h.

Beispiel für #define:

    #define PI 3.14159
    #define CELSIUS_ZU_FAHRENHEIT( t ) ( ( t ) * 1.8 + 32 )

Der erste Fall definiert einfach eine Konstante (wofür andere Sprachen Konstrukte innerhalb der Sprache selber haben wie "const").
Der zweite Fall definiert eine Art Funktion. An jeder Stelle, wo im folgenden C-Code "CELSIUS_ZU_FAHRENHEIT( <IRGENDWAS> ) steht,
z.B.:

    fahrenheit = CELSIUS_ZU_FAHRENHEIT( celsius + 5 );

(wobei "fahrenheit" und "celsius" Variablen sind), macht der Präprozessor daraus:

    fahrenheit = ( ( celsius + 5 ) * 1.8 + 32 );

(Beispiel aus Wikipedia: https://de.wikipedia.org/wiki/C-Pr%C3%A4prozessor)

Vorteil: maschinen-nah = schnell (Anfang 70er!)
Nachteil: maschinen-nah = die Programmierende denkt wie die Maschine

kann sehr unleserlich geschrieben werden - gefeiert wird das im International Obfuscated C Code Contest.

 

  • 1. Forschungsabteilung der Telefongesellschaft AT&T, acht Nobelpreise und diverse Turing-Awards ...
Meta
Jahr
1972
Nachkommen-Sprachen
Quelle
Wikipedia (EN): C
Abruf

Neuen Kommentar hinzufügen

Eingeschränktes HTML

  • Erlaubte HTML-Tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.