Programmiersprache C lernen, wie am Besten?

8 Antworten

Hier ein Tip von mir: Anstatt Visual Studio empfehle ich den Qt-Creator. Das ist eine komplette C/C++ Entwicklungsumgebung bestehend aus Editor, Debugger, Formdesigner und der plattformunabhängigen Qt-Bibliothek. Das kann man auf 2 Arten lizenzieren: Einmal unter einer kostenlosen Open Source Lizenz (GNU GPL, GNU LPGL) oder unter einer kostenpflichtigen propritären kommerziellen Lizenz. Der Funktionsumfang ist bei beiden Lizenzen gleich. Nur mit dem Unterschied das man bei der kostenpflichtigen Lizenz seinen Quellcode verschlüsseln kann.

Hier die benötigten Downloads:

Für Windows:

Für Mac:

Für Linux: Die GCC Compiler und der Qt-Creator werden über die jeweilige Paketverwaltung der Distribution installiert. Das Qt Installer Framework gibt es nicht für Linux, dort wird mit den Bordmitteln je nach Distribution ein DEB oder RPM Paket erzeugt.

Durch die Plattformunabhängigkeit von Qt braucht man beim Portieren den Quellcode nicht zu ändern. Die Zukunft des Programmierens ist die indem man plattformunabhängig programmiert.

Beispiel: Google Earth, VLC Media Player und die freie DJ-Software Mixxx wurden mit dem Qt-Creator programmiert.

Da C++ eine Erweiterung von C ist, empfehle ich auf C++ umzusteigen.


x0dTb0x 
Fragesteller
 26.07.2019, 12:20

Noch ne Frage.. ich arbeite mit Mac OS.

GCC habe ich jetzt installiert. Kann ich dann mein Programm einfach mit einem beliebigen Editor erstellen und dann auf dem Terminal laufen lassen ? Ich verstehe das nämlich nicht ganz .. dann wird des ganze doch automatisch kompiliert oder nicht ?

0
Und sollte ich vllt direkt mit C++ anfangen ?

Nein

Wenn Du für Dein Studium C brauchst, macht C++ weniger Sinn. Bevor hier großer Widerspruch kommt: Zwar ist der Steuerungssyntax zum großen Teil ähnlich (aber doch nicht ganz), jedoch gibt es kein cout, kein cin, kein new, keine String-Typen, etc., sondern alles old-style printf, scanf, malloc, rohe Zeiger, char* etc. Ist doch schon etwas anderes und ziemlich roh, aber dafür praktisch für Minicompilersets wie z.B. bei Microcontroller etc.

Wie kann ich das so schnell wie möglich lernen ?

Buch online dazu:

http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Ist zwar von Jürgen Wolf, den viele nicht so sehr schätzen wie ich es tue (bei manchem muss man aufpassen, seinen Stil übernehme ich auch nicht, aber seine Bücher mag ich einfach), aber dafür online (kostenlos) und sehr umfassend (im Ausdruck ca. 1.000 Seiten).

Durcharbeiten bis mindestens Kapitel 15.

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich

Eine gute Möglichkeit: Visual Studio von MS. Ist kostenlos, und eine riesige Community kann dich unterstützen. So schnell wie möglich: Lernen wird man das nur durch machen, Erfahrungen sammeln, das braucht Zeit...

Woher ich das weiß:Berufserfahrung

C ist eine der schwierigsten Sprachen, auch wenn die Syntax das elegante Vorbild vieler moderner Hochsprachen ist. Man muss als Anfänger C anhand von guten Code-Beispielen, die man vorsichtig und verständig anpasst, erlernen. Anders findet man keinen praktikablen, zumutbaren Einstieg, denn:

Untrennbar zu der Programmiersprache C gehört der (umfangreiche) C-Standard, der genau definiert was in der Sprache geht und was nicht definiert ist.

Also entweder die Beispiele oder den Standard büffeln. Was allerdings gerade für Anfänger, die ja auch noch die ganzen Konzepte wie etwa rekursives Programmieren und die allgemeinen, grundlegenden Algorithmen verstehen sollen, schwer zumutbar ist.

Es braucht wirklich JAHRE bis man C so beherrscht, dass man ein Programm damit schreiben und sicher sagen kann, dass es nicht nur compiliert, sondern auch richtig ist! Die Lernkurve ist also erheblich steiler, als in Python.

Das liegt an der Aufgabe für die C konstruiert ist: Einfach und schnell zu kompilieren in effizienten Assembler aber dabei so allgemein zu bleiben (und fast so mächtig) wie man es von einer Hochsprache erwartet.

So was geht nur mit Kompromissen. Der Weg, den die C-Designer gegangen sind, beinhaltet etwa (mit einer der Gründe wieso sich C Code so schön und einfach in effizienten Assembler übersetzen lässt) das Handling der syntatktisch zwar legalen, aber nicht notwendig im Ergebnis eindeutig definierten Befehle.

Damit ist gemeint: sehr häufig hängt das Ergebnis einer Aktion, etwa einer Addition, von der Hardware ab, auf der sie ausgeführt wird.

Ein naives Beispiel wäre 7+1=8 auf einer 4-Bit Maschine, aber 7+1=0 auf einer 3-Bit Maschine. Sowas IMMER abzufangen ist genau der aufwendige Teil des Compiler-Baus und es macht die erzeugten Programme schwer zu optimieren (für die Compiler) und damit tendenziell langsam.

Bitte mach dir klar, dass es ein Unterschied ist, ob dir die Sprachdefinition garantiert, dass du z.B. jede ganze Zahl als 64-Bit integer darstellen kannst und mit Kreiszahlen rechnest, oder ob das Ergebnis komplett von der Hardware abhängig ist!

Wenn das Ergebnis nicht definiert ist, dann darf ein C-Compiler jedes Verhalten im Programmfluss annehmen, oft ist das einfach den Code-Block ganz weg zu lassen, was manches mal für ein lustiges (nicht wirklich lustig) Hallo sorgt.

Ein Beispiel sind alte Rechnerarchitekturen, die physisch getrennte und strukturell unterschiedliche Arbeitsspeicher für Daten und Adressen (Zeiger) dieser Daten hatten. Natürlich sind Zeiger auch Daten, irgendwie, denn sie enthalten ja eine Information. Allerdings kann man dann nicht einfach so etwas wie "Zeiger ist gleich Zahl" programmieren.

Aber auch auf solchen Geräten sollten C-Programme kompilierbar sein. Also sind Zuordnungen "Zeiger = Zahl" oder "Zeiger Typ1 = Zeiger Typ2" in C allgemein als nicht definiert Angenommen und alles was nach solch einer Anweisung kommt im Programmblock darf ein standardkonformer Compiler mit gutem Recht ignorieren oder die Weltherrschaft übernehmen oder mit Bananen werfen. (Das stimmt auch wieder nicht wirklich, denn es gibt in C speziell noch den "Zeiger auf void" bzw "Zeiger auf char" mit denen man das doch immer darf; sonst wären viele schöne Pointer-Hacks in C nicht möglich und das würde alle sehr traurig machen, denn ...)

... einer der Gründe wieso C so toll aber auch so fehleranfällig ist, ist die geniale Pointer-Arithmetik dieser Sprache. Damit verabschiede ich mich jetzt.

Viel Spaß beim Büffeln!

Woher ich das weiß:Studium / Ausbildung

C ist schon sehr anders als Python fast schon das Gegenteil davon wenns um Programmiersprachen geht. Natürlich gibt es auch viele Gemeinsamkeiten und es hilft, wenn man schon eine andere Sprache kann.

Wenn es im Studium dran kommt, lernst du es dort sowieso von Anfang an, aber wenn du es schon davor können willst würde ich mir dazu ein gutes Buch suchen oder mal auf YouTube suchen.

C++ ist im Endeffekt einfach eine Erweiterung von C also würde dich C++ auch sehr weit bringen.

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik