ubuntuusers.de

C lernen - Tutorials - Vorschläge

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

spanky

Avatar von spanky

Anmeldungsdatum:
4. November 2007

Beiträge: 175

Wohnort: /var/www

Hallo,

ich möchte ein bisschen in die C Programmierung einsteigen. Im Internet habe ich schon zahlreiche Tutorials gefunden, aber leider findet man meist kaum Bewertungen oder Kommentare dazu.

Wie habt ihr denn C gelernt? Mit einem Buch oder per Tutorial im Internet? Welche Kurse könnt ihr empfehlen? Mit welchen habt ihr gute Erfahrungen gemacht?

moospit

Avatar von moospit

Anmeldungsdatum:
10. Juni 2007

Beiträge: 171

Wohnort: /home/franken

Hallo,

unter http://de.wikibooks.org/wiki/C-Programmierung findet man eigentlich alles, was für einen erfolgreichen Einstieg in C notwendig ist.

mfg moospit

Jerry

Avatar von Jerry

Anmeldungsdatum:
20. April 2006

Beiträge: 595

Wohnort: Gelsenkirchen Buer

http://openbook.galileocomputing.de/c_von_a_bis_z/

Damit lässt sich auch gut lernen.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Was willst Du mit einer Steinzeitsprache wie C? Ich kenne C sehr genau, da ich mein Geld damit verdiene, und es ist alles, nur keine gute Programmiersprache.

spanky

(Themenstarter)
Avatar von spanky

Anmeldungsdatum:
4. November 2007

Beiträge: 175

Wohnort: /var/www

Warum nicht mit C anfangen? Diese "Steinzeitsprache" wird jedenfalls noch (fast) im gesamten Linux Kernel verwendet und auch viele GTK Programme basieren auf C. 😉

Was spricht gegen C?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

IMHO zu pauschal geurteilt. C ist ein prima "portabler Makroassembler" und IMHO eine gute Sprache wenn man etwas hardwarenahes oder für "kleine" Systeme (Mikroprozessoren und wenig RAM) programmiert.

Ausserdem hilft C die Computerarchitektur besser zu verstehen und Kenntnisse sind oft nötig wenn man Bibliotheken mit Hochsprachen verbinden möchte.

e1bart0 Team-Icon

Avatar von e1bart0

Anmeldungsdatum:
12. Mai 2007

Beiträge: 927

Wohnort: München

spanky schrieb:

Was spricht gegen C?

Schau dir mal den Link in Hello Worlds Signatur an. 😉

spanky

(Themenstarter)
Avatar von spanky

Anmeldungsdatum:
4. November 2007

Beiträge: 175

Wohnort: /var/www

Marc 'BlackJack' Rintsch schrieb:

IMHO zu pauschal geurteilt. C ist ein prima "portabler Makroassembler" und IMHO eine gute Sprache wenn man etwas hardwarenahes oder für "kleine" Systeme (Mikroprozessoren und wenig RAM) programmiert.

Ausserdem hilft C die Computerarchitektur besser zu verstehen und Kenntnisse sind oft nötig wenn man Bibliotheken mit Hochsprachen verbinden möchte.

Vielen Dank für diese Erläuterung. 👍

e1bart0 schrieb:

spanky schrieb:

Was spricht gegen C?

Schau dir mal den Link in Hello Worlds Signatur an. 😉

Gerade gesehen. 😉

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

spanky schrieb:

Warum nicht mit C anfangen? Diese "Steinzeitsprache" wird jedenfalls noch (fast) im gesamten Linux Kernel verwendet und auch viele GTK Programme basieren auf C. 😉

Ja und, macht es das zu einer guten Programmiersprache? Die vorhandenen Betriebssystemkerne wurden eben aus historischen und anderen Gründen in C geschrieben, aber wenn man nicht gerade am Linux-Kernel mitentwickeln will, ist C die falsche Wahl. Ich weiß natürlich nicht, ob der OP schon programmieren kann und aus einem bestimmten Grund C lernen muss oder ob er einfach von C gehört hat und nun der Auffassung ist, dass dies ein guter Einstieg ins Programmieren sei.

Was spricht gegen C?

Es ist einfach eine schlechte, unintuitive, umständliche Sprache. Es ist eine Sprache, mit der man unproduktiv ist. Es gibt so viele bessere Sprachen, und wenn der OP nicht auf C festgelegt ist (aufgrund seiner Wortwahl gehe ich davon aus, dass er sich frei entscheiden kann), dann muss man ihn nicht ins Verderben rennen lassen. Entscheiden muss er sich natürlich selber, aber er sollte sich vorher ein breites Bild machen, zu dem sicherlich auch die Erfahrungen von Profis wie Hello World gehört.

EDIT: Sorry, hab gerade erst gesehen, dass du selber der OP bist 😉

spanky

(Themenstarter)
Avatar von spanky

Anmeldungsdatum:
4. November 2007

Beiträge: 175

Wohnort: /var/www

OT: Ich habe schon einige Programme in Python geschrieben, also ich bin kein absoluter Anfänger. Nur wollte ich mal etwas anderes ausprobieren.

Back to Topic. 😉

Wer hat denn noch ein paar Vorschläge für Online-Kurse o.ä. zum Thema "C lernen"? 😀

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

spanky schrieb:

OT: Ich habe schon einige Programme in Python geschrieben, also ich bin kein absoluter Anfänger. Nur wollte ich mal etwas anderes ausprobieren.

Es steht Dir natürlich frei, zu tun und zu lassen, was Du willst. Dennoch würde ich Dir empfehlen, die Finger von C zu lassen, solange es keinen ganz konkreten Grund gibt, ausgerechnet diese Sprache zu verwenden. Mal ein paar Gründe dagegen:

  • sehr komplizierte Syntax. Beispiel: int i[5] deklariert ein Array von 5 Ganzzahlen, int *i einen Zeiger auf ganze Zahlen. Was ist nun int *i[5], ein Zeiger auf ein Array, oder ein Array von Zeigern - dank der kryptischen C-Syntax ist das nicht ersichtlich. Anderes Beispiel: int i,j deklariert zwei Ganzzahlen namens i und j. Man sollte meinen, man könne mit int* i, j zwei int-Zeiger deklarieren. Dem ist aber nicht so, das zweite Beispiel deklariert einen int-Zeiger, i, und ein int, j.

  • keine Unterstützung für generische Programmierung. Das heißt, wenn Du einen Algorithmus schreibst, der z. B. eine Liste von Zahlen addiert, dann musst Du das für jeden Datentypen neu aufschreiben, und Datentypen gibt es in C mehr als genug (float, double, long double, float _Complex, double _Complex, long double _Complex, char, signed char, short, int, long, long long, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long).

  • Der Präprozessor. Ein fürchterliches Frickelwerkzeug, das geschaffen wurde, um Mängel in der Sprache notdürftig zu übertünchen. Sorgt im Endeffekt dafür, dass Du nicht eine, sondern zwei größtenteils unabhängige Sprachen lernen musst.

  • sehr oft undefiniertes Verhalten. Folgendes ist ein gültiges C-Statement: x = x++ + ++x. Dummerweise ist nirgendwo definiert, was das denn eigentlich bedeuten soll. Wenn x zunächst den Wert 0 hat, und man das Programm mit dem gcc kompiliert, hat x nach Ausführung des Statements den Wert 3. Kompiliert man mit tcc, so hat x hinterher den Wert 2. Undefiniertes Verhalten lässt sich in einer Low-Level-Sprache wie C wahrscheinlich nur schwer vermeiden, aber C ist in dieser Hinsicht wirklich schlimm.

  • nicht typsicherer Linker. Das kann dazu führen, dass eine ganz andere Funktion aufgerufen wird, als man eigentlich wollte, und das wiederrum kann in C zu schwer zu findenden Bugs führen.

Ich habe hier bewusst nur Schwächen aufgezählt, die nichts mit Cs Low-Level-Natur zu tun haben. Man könnte all diese Schwächen beseitigen, ohne die Performance zu beeinträchtigen (in C++ ist das teilweise geschehen)

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

Das Beispiel bei "Sehr oft undefiniertes Verhalten" ist schlecht gewählt, weil das wohl kaum jemand aus versehen hinschreiben würde. Beispiele aus echtem Quelltext wären da wohl überzeugender. Und möglichst welche, die in lesbarem Code auftreten und nicht wo jemand versucht hat besonders "clever" zu sein.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Man kann jeden Pointer in einem void* speichern - außer Funktionspointern, denn das führt zu undefiniertem Verhalten. Genauso ein Funktionsaufruf in einem Signalhandler. Oder der Aufruf einer variadischen Funktion mit Argumenten, die sie nicht erwartet (was mangels Typüberprüfung bei variadischen Funktionen sehr leicht passiert).

Erunno

Anmeldungsdatum:
7. Juli 2006

Beiträge: 279

Hello World schrieb:

  • Der Präprozessor. Ein fürchterliches Frickelwerkzeug, das geschaffen wurde, um Mängel in der Sprache notdürftig zu übertünchen. Sorgt im Endeffekt dafür, dass Du nicht eine, sondern zwei größtenteils unabhängige Sprachen lernen musst.

Apropos zwei Sprachen: Ich meine mich zu erinnern, dass man dem C Präprozessor Turing-Vollständigkeit nachgewiesen hat. 😲

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Apropos zwei Sprachen: Ich meine mich zu erinnern, dass man dem C Präprozessor Turing-Vollständigkeit nachgewiesen hat. 😲

Sequenz hat er, Verzweigung auch, aber Iteration oder Rekursion?

Antworten |