Website-Suche

C-Entwicklung unter Linux - Vergleich zwischen C und anderen Programmiersprachen - II.


Einleitung

Nachdem wir in unserem ersten Teil dieses Artikels gesagt haben, dass wir von Ihnen, dem Leser, einige Programmierkenntnisse erwarten, möchten wir Ihnen in diesem Teil helfen, einen Überblick darüber zu bekommen, wo C im Vergleich zu anderen Programmiersprachen, die Sie vielleicht kennen, steht. Die Auswahl dieser Sprachen war aufgrund verschiedener Kriterien ziemlich schwierig, aber am Ende haben wir uns für C++, Perl und Python entschieden. Da Programmiersprachen auf viele Arten klassifiziert werden können (z. B. abhängig von Paradigma, Syntax oder Stil), haben wir nicht versucht, Sprachen zu finden, die in der gleichen Kategorie wie C liegen. Da die oben genannten Sprachen in der Linux-Welt ziemlich beliebt sind, haben wir sie stattdessen ausgewählt und erwähnt, welchen Platz jede Sprache in dem großen Schema hat, wofür sie im Allgemeinen verwendet wird und natürlich die Unterschiede zwischen ihnen und C. Dieser Artikel wird wie folgt aufgebaut sein: Wir beginnen mit wichtigen Elementen jeder Sprache, wie der Deklaration von Variablen, der Typisierung oder der Struktur, und vergleichen dies mit der Art und Weise, wie es mit C gemacht wird. Daher hoffen wir, Ihnen eine Vorstellung von der Sprache zu geben, bevor wir beginnen. Die Teile, aus denen dieser Artikel besteht, werden genau wie die angekündigte Struktur dieses Artikels sein, um das Verständnis zu erleichtern.

Der Vergleich

Typen, Operatoren, Variablen

C++

C++ hieß ursprünglich "C mit Klassen", was viel über seine Beziehung zu C aussagt. Es wird weithin als Obermenge von C angesehen ( daher C++ der unäre Inkrementoperator ++ ) und führt objektorientierte Programmierfunktionen ein. Typen werden im Wesentlichen gleich verwendet, wobei bool in C++ für boolesche Operationen eingeführt wird. Wenn wir über die Unterschiede zwischen C und C++ sprechen, stammen die meisten davon aus den OOP-Konzepten, die C++ hat und C nicht. C++ verfügt z. B. über eine Operatorüberladung, einen OOP-spezifischen Begriff, der bedeutet, dass ein Operator je nach den Daten, mit denen er arbeitet, unterschiedliche Implementierungen haben kann. In C++ können Sie beispielsweise Folgendes tun:

 
a << 2

Nun, wenn a eine Ganzzahl ist, wird dies eine bitweise Operation ausführen (Linksverschiebung um 2), aber wenn a ein Ausgabestrom ist, wird die obige Zeile versuchen, eine '2' darauf zu schreiben. Diese Art von Verhalten ist einer der Gründe, warum C++ dafür kritisiert wird, schlechte Programmierpraktiken zuzulassen. Variablen und Konstanten werden auf die gleiche Weise wie in C deklariert.

Perl

Mit Perl ist es einfacher: Es gibt nur drei Datentypen. Dabei handelt es sich um Skalare, Arrays und Hashes oder assoziative Arrays. Skalaren wird ein Dollarzeichen vorangestellt, Arrays wird ein @ vorangestellt und Hashes wird %s vorangestellt. Der Unterschied in Bezug auf Typen besteht darin, dass Perl eine dynamische Programmiersprache ist, während C schwach typisiert ist, was bedeutet, dass Sie es in C mit korrekten Deklarationen von Variablen zu tun haben, wie z.B. "diese Variable ist eine ganze Zahl" oder "diese andere Variable ist ein Zeiger auf einen Gleitkomma". Die Unterschiede in Bezug auf arithmetische Operatoren bestehen nur darin, dass Perl '**' für die Potenzierung hat, während C eine Funktion benötigt, um dies zu erreichen.

Python

Die Variablendeklaration von Python ist kontextbasiert. Zum Beispiel wollen wir einen String, eine Ganzzahl und einen Gleitkommawert deklarieren:

var1 = "String"
var2 = 100
var3 = 100.98

Mit C wäre das wie folgt gewesen:

char* var1 = "String";
int var2 = 100;
float var3 = 100.98;

C hat keinen String-Typ wie andere Sprachen, daher muss ein String als Array von Zeichen oder als Zeiger auf ein Zeichen deklariert werden, während Python Zahlen, Wörterbücher, Strings, Listen und Tupel als Datentypen anbietet.

Flusskontrolle

Alle vier hier beschriebenen Sprachen haben viele Gemeinsamkeiten, wenn es um die Ablaufsteuerung geht. Wenn Sie beispielsweise einen if-Block starten, erfordert none ein ending-Schlüsselwort, wie fi in Bash oder Algol68. Apropos if-Blöcke, die Syntax ist ähnlich, wenn Sie also in C++, Perl oder Python programmiert haben, werden Sie die Art und Weise von C sehr vertraut finden. Das Gleiche gilt für den Rest der Flusssteuerungsoperationen: for, do, while, switch/case oder break/continue. Auch hier gilt: Wenn Sie an die Art und Weise gewöhnt sind, wie die drei Sprachen die Flusssteuerung durchführen, werden Sie einige Minuten brauchen, um sich an C zu gewöhnen. Einige Hauptunterschiede könnten sein: Perl hat mehr Schlüsselwörter, um damit umzugehen als C, wie redo, last oder next. Python hat das pass-Schlüsselwort für...nichts tun, aber es ist nützlich, wenn man eine leere Klasse benötigt. Zum Beispiel:

class Empty:
     pass

Funktionen

Eine einfache Funktionsdeklaration in C würde wie folgt aussehen:

int sum (int a, int b)
    {
        return a + b;
    }

Dies wäre eine Funktion namens sum, die eine Ganzzahl aus der Berechnung der Summe ihrer Argumente a und b, ebenfalls Ganzzahlen, zurückgibt. Beachten Sie die Blöcke, die eine klare Abgrenzung darüber enthalten, wo der Text der Funktion beginnt und wann er endet. In Perl wird der Begriff Funktion synonym mit Subroutine verwendet. Sie können, wie in C, zuerst eine Funktion deklarieren und dann definieren, oder sie deklarieren und in einem Schuss definieren, wie wir es oben getan haben. Sie müssen das Schlüsselwort sub verwenden, um dem Perl-Interpreter mitzuteilen, was Sie tun möchten. In Python würde unser Summenbeispiel wie folgt aussehen:

def sum ( a, b ):
  return a + b

Vielleicht ist Ihnen aufgefallen, dass wir nichts über C++ gesagt haben. Nun, was uns betrifft, gibt es in dieser Hinsicht keinen Unterschied zwischen C und C++.

Zeiger und Arrays

Ein Zeiger ist eine Variable, die den Speicherplatz einer anderen Variablen enthält. Wie in C sind Zeiger und Arrays ziemlich eng miteinander verbunden und bieten dem C++-Programmierer viele erweiterte Funktionen. Auch hier gibt es keinen wichtigen Unterschied zwischen den beiden. Perl verfügt über Referenzen, die die gleiche Funktionalität bieten. Dieser Codeabschnitt definiert z. B. eine Variable mit dem Namen var und einen Verweis darauf mit dem Namen refvar:

$var = 20;
$refvar = \$var;

In C hätten wir so etwas wie

int var;
var = 20;
int *refvar;
refvar = &var;

Perl erlaubt dem Programmierer wie Python nicht, den Speicher direkt zu manipulieren. Einige sehen das als eine gute Sache an, andere nicht. Python bietet ctypes an, eine Bibliothek, die die Funktion pointer() für die Verwendung von Zeigern anbietet. Die kurze Geschichte ist: Python verwendet keine Zeiger. Die lange Geschichte ist, dass Pythons Art und Weise, Variablen zu referenzieren, d.h. nur nach Wert, anders ist als die eines Programmierers, der an C gewöhnt ist.

Wenn Sie Arrays in C++ oder Perl verwendet haben, ist das Konzept größtenteils dasselbe. Perl hat eine andere Syntax, aber wenn Sie bereits wissen, was ein Array ist, werden Sie in C in Ordnung sein. Python bietet das Array-Modul an, das diese Funktionalität bietet, da es bereits Listen als Basistyp hat, außer dass Arrays restriktiver sind.

Strukturen

In C ist eine Struktur ein Datensatz, der einen festen, beschrifteten Satz von Objekten enthält, die alle in einem Objekt zusammengefasst sind. Zum Beispiel:

struct customer {
   int account;
   char *name;
   float balance;
};

Zitat von Wikipedia: "In C++ ist eine Struktur eine Klasse, die mit dem Schlüsselwort struct definiert wird. Die Member und Basisklassen sind standardmäßig öffentlich. Eine Klasse, die mit dem Schlüsselwort class definiert ist, verfügt standardmäßig über private Member und Basisklassen. Dies ist der einzige Unterschied zwischen Strukturen und Klassen in C++." In Perl bis Version 5 waren Strukturen ein Problem (oder deren Fehlen), aber jetzt gibt es perldsc (Perl Data Structures Cookbook), das unter perldoc.org verfügbar ist. In Python kann man dafür immer (naja, fast) Tupel oder Wörterbücher verwenden.

Einbinden von Dateien

Wie Sie im ersten Teil gesehen haben, verwendet man in C Präprozessordirektiven, um Definitionen aus anderen Dateien einzuschließen. Diese Funktionalität wird auch von C++ mit der gleichen Syntax angeboten, mit der Ausnahme, dass Headerdateien $name.hpp heißen und Sie die Dateierweiterung nicht benötigen:

#include <iostream>

iostream ist das C++-Äquivalent zu stdio.h. In Perl haben wir dafür das Schlüsselwort use, das wie folgt verwendet werden kann:

use Module;

In Python ist das Äquivalent zur Verwendung import, das genau wie in Perl verwendet wird, nur dass kein Semikolon am Ende erforderlich ist.

Weitere Überlegungen

Vielen von Ihnen ist aufgefallen, dass alle Sprachen, die für unseren Vergleich ausgewählt wurden, objektorientiert sind, C jedoch nicht. Dies ist kein unfairer Vergleich, denn wenn wir Fortran oder Prolog als Vergleichsbegriffe gewählt hätten, wäre unser Artikel wahrscheinlich nicht sehr beliebt gewesen, da viele Programmierer heute diese Sprachen nicht verwenden. Auf der anderen Seite haben wir dies als eine Möglichkeit betrachtet, nasse Füße zu bekommen, denn Gewohnheit ist Teil der menschlichen Natur und wenn Sie jemals eine oder mehrere dieser Sprachen verwendet haben, wird es Ihnen leichter fallen, wenn Sie anfangen, C zu lernen. Dieser Teil des Artikels ist also als helfende Hand gedacht und wenn wir das geschafft haben, ist es in Ordnung.

C und C++

Einige von Ihnen fragen sich vielleicht: Wenn C++ C so ähnlich ist, aber komplexer ist und mehr bietet, warum sollte man sich dann mit C herumschlagen? Dieses Thema ist mehr diskutiert worden, als es hätte sein sollen, und wir werden versuchen, eine eigene Antwort zu geben. Zunächst einmal ist C einfacher. K&R hat 266 Seiten, während "The C++ programming language" vom Schöpfer Bjarne Stroustrup 1090 Seiten hat. "Genug gesagt. Zweitens, vorhandener Code. Unabhängig von der Hardware-Architektur, dem Betriebssystem oder dem Zweck ist C weit verbreitet und noch einiges mehr. Von Betriebssystem-Kernels bis hin zu GUI-Bibliotheken ist C da und hat nicht die Absicht, es irgendwo zu hinterlassen. Das soll nicht heißen, dass C++ nicht von vielen Entwicklern verwendet wird. Wir sagen nur, dass Sie früher oder später mit C-Code arbeiten oder eine davon beeinflusste Sprache verwenden müssen, so dass C-Kenntnisse in einem Lebenslauf immer gut aussehen. Drittens, wenn Sie C und C++ lernen möchten, sind Sie besser dran, mit C zu beginnen, wegen der bereits erwähnten Einfachheit und weil Sie, sobald Sie die Grundlagen haben, C++ wird einfacher zu erlernen sein. Schließlich kommt es auf das richtige Werkzeug für die jeweilige Aufgabe an. Wenn Sie schnellen Code, die Möglichkeit, Low-Level zu verwenden, und eine einfache Sprache benötigen, entscheiden Sie sich für C.

Schlussfolgerung

Nach diesem zweiten Teil dieses Artikels werden wir mit dem Erlernen der C-Programmierung unter Linux beginnen, da wir der Meinung sind, dass zu viele einführende Teile keinen Sinn machen. Wir helfen Ihnen gerne weiter.

Hier ist, was Sie als nächstes erwarten können:

  • I.C.-Entwicklung unter Linux – Einführung
  • II. Vergleich zwischen C und anderen Programmiersprachen
  • III. Typen, Operatoren, Variablen
  • IV. Flusskontrolle
  • V. Funktionen
  • VI. Zeiger und Arrays
  • VII. Strukturen
  • VIII. Grundlegende I/O
  • IX. Codierungsstil und Empfehlungen
  • X. Erstellen eines Programms
  • XI. Paketierung für Debian und Fedora
  • XII. Ein Paket in die offiziellen Debian-Repositories bekommen

Verwandte Artikel: