C für Anfänger ?

Hallo zusammen

Was kann man einem Anfänger für Literatur empfehlen ?
Beim rumstöbern bin ich jetzt schon allein durch die
verschieden Standarts und Varianten der C Sprache verwirrt
POSIX ANSI-C BSD SVR4 C C++ ???
Ich will unter Linux bestehende Programme verändern bzw funktionen einbauen.
An welchen Standart hält man sich da ?
Welches Buch kann man einem Anfänger dieser Sprache empfehlen
Sollte am besten -( logisch ) bei 0 anfangen und in deutscher Sprache verfasst sein.
( OK wenns nicht anders geht - auch englisch )
Wichtig wären kleine Beispiele und Übungen da lernt es sich besser ( erfahrung )

Phagsae

An welchen Standart hält man sich da ?

Der Standard an sich ist ANSI-C, das sollte überall funktionieren

Der Sprachstandard für C ist ANSI C. Ausschliesslich in C wird
heute seltener Programmiert, meistens wird C++ verwendet. C++ ist eine Objektorientiere Erweiterung die aus den Sprachen C, Simula 67 und Algol 68 hervor ging.

Als absoluter Anfänger empfehle ich Dir:

Das C Grundlagen Buch und/oder
Das C++ Grundlagen Buch

beide sind bei Addison-Wesley erschienen. Es sind relativ dicke Wälzer (ca. 90 DM) aber jeden Pfennig wert.

Gruss,
Matthias Thoma

Moin,

Ausschliesslich in C wird heute seltener Programmiert, meistens :wird C++ verwendet.

Es gibt diverse Produkte, die mit C++ überfordert sind, z.B. verscheidene ESQL. Reines C ist immer noch enorm wichtig. C++ ist für Anfänger ungeeignet.

Thorsten

Moin,

Was kann man einem Anfänger für Literatur empfehlen ?

Im Allgemeinen wird Kerninghan/Ritchie (0131103628) empfohlen, ich kenne es selbst aber nicht (ich hatte einen hervorragenden Lehrer).

Ich will unter Linux bestehende Programme verändern bzw
funktionen einbauen.
An welchen Standart hält man sich da ?

An den gcc- (oder g+±) Standard. Der hält sich wiederum an ANSI.

Welches Buch kann man einem Anfänger dieser Sprache empfehlen

Ich würde mich nicht auf ein Buch festlegen. Nach einem Einsteigerbuch kann ich das ‚C Puzzle Book‘ (0201604612) wärmstens empfehlen, für Linux dann Linux-UNIX-Systemprogrammierung (3827315123).

Thorsten

Ausschliesslich in C wird
heute seltener Programmiert, meistens wird C++ verwendet

Hm, naja also wenn ich mir irgendwelche Sourcecodes von Programmen anschaue z.b. von Open-Source auf Linux dann siehst du zu 99% nur zu. Wohl insbesondere wenn die Performance wichtig ist, ist C einfach schneller.
Allerdings ist mir persönlich C++ auch lieber und ausserdem kann man ja weiter seinen Code c-mäßig runterhacken und die kleinen Vorzüge wie Variablendeklaration mitten im Code nutzen :smile:

Bruno

Ich vertrete die Meinung wer C++ kann hat mit C keine Probleme. Ich hab auch zuerst mit C angefangen und bin dann auf C++ umgestiegen. Bei Linux stellt sich natürlich die Frage was man machen will. Ich will jetzt nicht weiter die historischen zusammenhänge zwischen Unix und C aufwärmen, aber neuere Linux Anwendungen werden wohl zunehmend C++ verwenden (müssen).
Die Kernelprogrammierung und die diversen (Kommandozeilen) Tools stellen mehr ansprüche an sein Detailwissen. Da fällt das erlernen der Programmiersprache nicht so sehr ins Gewicht.

Gruss,
Matthias Thoma

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin,

Ich vertrete die Meinung wer C++ kann hat mit C keine
Probleme.

Das ist eine Binsenweisheit, das Problem dürfte aber sein, gleichzeitig C und die C+±Ergänzungen zu lernen. Für Anfänger gibt wenige Sprachen, die weniger geeignet sind als C++ (INTERCAL vielleicht).

Ich hab auch zuerst mit C angefangen und bin dann
auf C++ umgestiegen.

Eben.

Die Kernelprogrammierung und die diversen (Kommandozeilen)
Tools stellen mehr ansprüche an sein Detailwissen. Da fällt
das erlernen der Programmiersprache nicht so sehr ins Gewicht.

Dabei übersiehst Du, daß man UNIX und C kaum trennen kann. Versuch mal, soviel über Linux (also den Kernel) zu lernen, daß Du in einer anderen Sprache programmieren kannst, aber nichts über C weißt.

Thorsten

> Das ist eine Binsenweisheit,

So würde ich das nicht nennen. C++ hat soviele Elemente von C das man einen gut geschriebenen C Code lesen kann.

> das Problem dürfte aber sein, gleichzeitig C und die
> C+±Ergänzungen zu lernen. Für Anfänger gibt wenige Sprachen, > die weniger geeignet sind als
> C++ (INTERCAL vielleicht).

Das ist reine Ansichtssache. Als reine Anfängersprache würde ich Delphi empfehlen. Dort ist die Sprachstruktur zugegebenermassen einfacher und man kann trotzdem ein gefühl für OOP (im gegensatz zu VB) bekommen.

> Dabei übersiehst Du, daß man UNIX und C kaum trennen kann. > Versuch mal, soviel über Linux
> (also den Kernel) zu lernen, daß Du in einer anderen Sprache > programmieren kannst, aber nichts
> über C weißt.

Ich glaube da hasst du mich Missverstanden. Ich wollte ihm eigentlich klarmachen das beim herumprogrammieren am Kernel mehr Zeit für das erlernen des Systems notwendig ist als für das erlernen von C. Wenn er erst einmal C kann wird er noch 3 mal soviel Zeit aufwenden müssen um den Kernel zu VERSTEHEN bevor er anfangen kann daran herumzubasteln. Ich kenne die Geschichte der Entwicklung von Unix und C (wer kennt die nicht?)

Gruss,
Matthias Thoma

Moin,

So würde ich das nicht nennen. C++ hat soviele Elemente von C
das man einen gut geschriebenen C Code lesen kann.

C ist eine Untermenge con C++, also ist es wohl nicht schwer zu erraten, daß man C lesen kann, wenn man C++ kann.

> das Problem dürfte aber sein, gleichzeitig C und die
> C+±Ergänzungen zu lernen. Für Anfänger gibt wenige
Sprachen, > die weniger geeignet sind als
> C++ (INTERCAL vielleicht).
Das ist reine Ansichtssache.

Das ist eben nicht reine Ansichtssache. Man muß sich nur klar machen, daß man entweder

  • C
    oder
  • C und alle Erweiterungen von C++
    lernen muß. Letzteres ist mehr, C ist an sich schon schwierig genug, also ist C++ für Anfänger nicht zu empfehlen.
    Wenn Du aber empfehlen solltest, auf alle reinen C-Bestandteile zu verzichten (z.B. string.h), dann kannst Du auch gleich Java lernen, das ist ausgereifter.

> Dabei übersiehst Du, daß man UNIX und C kaum trennen
kann. > Versuch mal, soviel über Linux
> (also den Kernel) zu lernen, daß Du in einer anderen
Sprache > programmieren kannst, aber nichts
> über C weißt.

(Ich ziehe auch > vor, das macht hier aber keinen Sinn.)

Ich glaube da hasst du mich Missverstanden. Ich wollte ihm
eigentlich klarmachen das beim herumprogrammieren am Kernel
mehr Zeit für das erlernen des Systems notwendig ist als für
das erlernen von C.

Klingt doch großartig. Genau so sollte man (nach ‚Hallo Welt‘) vorgehen. Leider ist das etwas mühsamer.
Ich habe C gleichzeitig mit Details über CPUs etc. gelernt. Erst so verliert ein Zeiger seinen Schrecken.

Thorsten

Moin,

So würde ich das nicht nennen. C++ hat soviele Elemente von C
das man einen gut geschriebenen C Code lesen kann.

C ist eine Untermenge con C++, also ist es wohl nicht schwer
zu erraten, daß man C lesen kann, wenn man C++ kann.

Ein gewiefter C programmierer kann einem „nur“ C++'ler aber auch ganz schön das leben schwehr machen.

> das Problem dürfte aber sein, gleichzeitig C und die
> C+±Ergänzungen zu lernen. Für Anfänger gibt wenige
Sprachen, > die weniger geeignet sind als
> C++ (INTERCAL vielleicht).
Das ist reine Ansichtssache.

Das ist eben nicht reine Ansichtssache. Man muß sich nur klar
machen, daß man entweder

  • C
    oder
  • C und alle Erweiterungen von C++
    lernen muß. Letzteres ist mehr, C ist an sich schon schwierig
    genug, also ist C++ für Anfänger nicht zu empfehlen.
    Wenn Du aber empfehlen solltest, auf alle reinen
    C-Bestandteile zu verzichten (z.B. string.h), dann kannst Du

Ich empfehle C++ zu lernen. Weil es

a) es nicht viel schwerer als C ist.
b) OOP heute ein muß ist.
c) C++ DER standard ist

Außerdem kann ich Deiner Argumentation nur bedingt folgen (das beruht wahrscheinlich auf Gegenseitigkeit.) Was ist deiner Meinung nach so schwer an C++. Das OOP? OOP ist wichtig. Heute muß man OOP lernen da führt kein weg dran vorbei. Ich empfehle auch keinem in QuickBasic zu Programmieren nur weil es einfach ist und man schnell(er) Ergebnisse erziehlt. Grundsätzlich halte ich die These das C einfacher als C++ für mehr als gewagt. C++ ist weitaus moderner als C, und falls er jemals auf die Idee kommen sollte Windows oder X-Windows Programme zu schreiben dann kann er mit reinem C einpacken. Ab einer gewissen Größe ist C einfach zu unhandlich.

auch gleich Java lernen, das ist ausgereifter.

Java ausgereifter als C++. Eine gewagte These :wink:
Vieleicht sollte er auf C# warten - das ist dann einfacher als C++ und JAVA.

> Dabei übersiehst Du, daß man UNIX und C kaum trennen
kann. > Versuch mal, soviel über Linux
> (also den Kernel) zu lernen, daß Du in einer anderen
Sprache > programmieren kannst, aber nichts
> über C weißt.

(Ich ziehe auch > vor, das macht hier aber keinen Sinn.)

Mein Netscape ist abgeschmiert und ich hab das Ding mit dem Texteditor fertiggestellt. Sorry, war unachtsam.

Klingt doch großartig.

Find ich jetzt nich so… Naja wir wollen jetzt nicht noch tiefer in den Glaubenkrieg einsteigen. Wenn man drei Programmierer nach der besten (einfachsten) Sprache fragt bekommt man acht Antworten.

Gruss,
Matthias Thoma

Moin,

Ein gewiefter C programmierer kann einem „nur“ C++'ler aber
auch ganz schön das leben schwehr machen.

Äh, ja. Das gilt auch umgekehrt und über Kreuz und in jeder anderen Richtung.

Ich empfehle C++ zu lernen. Weil es
a) es nicht viel schwerer als C ist.

Der ganze Bereich OOP macht es nicht viel schwerer?

b) OOP heute ein muß ist.
c) C++ DER standard ist

Ich meine, in der c’t oder im Heise Newsticker gelesen zu haben, daß Java C++ abgelöst hat.

Was ist deiner Meinung nach so schwer an C++. Das OOP?

Eigentlich das C.

Aber ja, wir verstehen uns miß. Ich halte C++ für die beste Sprache, um schnelle, große Anwendungen zu schreiben. Ich bestreite nur, daß man damit beginnen sollte.

Ich sehe zwei Möglichkeiten:

  • Man orientriert sich an OOP, das ist sicherlich allgemein zweckmäßig und auch marktgerecht. Hier würde ich einem Anfänger eine Sprache empfehlen, die einem den Einstieg in OOP einfach macht, idealerweise Smalltalk, Eiffel oder sogar etwas wie Self, aus praktischen Erwägungen Java.
  • C und seine Nachfahren decken wahrscheinlich mehr als 80% des Marktes ab, also ist es eine gute Wahl für eine prozedurale Sprache. Zudem lernt man zwangsläufig Dinge über Computer, die einem in jedem Fall helfen können.

Für einen Anfänger, der
>>>>unter Linux bestehende Programme verändern bzw
>>>>funktionen einbauen
will, empfehle ich C.
Warum nicht C++? Gerade weil es beide Punkte oben erfüllt. Es geht darum, die erste Sprache zu lernen, nicht die letzte. Wenn man gut in C und Java ist, ist C++ wirklich kinderleicht. Keine Wunder, C++ ist aus C abgeleitet, Java aus C++.

Vieleicht sollte er auf C# warten - das ist dann einfacher als
C++ und JAVA.

Chash für Linux? Nicht in diesem Jahrhundert.

Thorsten

Klasse !
Jetzt lichtet sich der wirrwarr schon ein bischen.

Hab die Diskussion interessiert verfolgt.
Da ham sich ja zwei gefunden *g*

Kleine zwischenfrage:
OOP ist Objektorientierte Programmiersprache ?

Die Bücher werd ich mir morgen mal in realita zu Gemüte führen
Die Beschreibungen im Internet waren leider sehr mager.

Das System programmier Buch von Meister Herold hab ich schon. Natürlich ohne den geringsten „C-schimmer“ eigentlich ein Fehlkauf
War aber von dem Linux Shell Buch so angetan - Hat auch schon ein fertiges logfile watch Programm ergeben inkl menügeführtes Setup - Das ich mir dachte naja dann steig ich doch mal tiefer ein.

Jetzt will mal ein bischen am isdnlog rumpfuschen um einige Daten Win clients zu übergeben

JaJa bisschen viel am Anfang ?
Mehr als scheitern kann man nicht.

Danke M&T
Phagsae

Klasse !

Also doch C++

Kleine zwischenfrage:
OOP ist Objektorientierte Programmiersprache ?

Objekt Orientiertes Programmieren.

Die Bücher werd ich mir morgen mal in realita zu Gemüte führen
Die Beschreibungen im Internet waren leider sehr mager.

Zu dem Buch das ich Dir empfohlen habe „Das C Grundlagen Buch“ kann ich dir noch sagen das es wirklich bei Null anfängt. Auf der Mitgelieferten CD sind alle Beispiele samt lösungen (Das Buch enthält wie Du es wolltest Beispielaufgaben am Ende jedes Kapitels). Mitgeliefert werden Lernversionen von Symantec C++ and DJ GNU. Es lehrt C an mehr oder weniger informatischen Themen wie Listen, Stapel etc.

Da fällt mir ein das ich noch irgendwo C Tutorials (Textdateien) und eine Beschreibung der LIBC rumliegen habe. Interresse?

Gruss,
Matthias Thoma

Ich empfehle C++ zu lernen. Weil es
a) es nicht viel schwerer als C ist.

Der ganze Bereich OOP macht es nicht viel schwerer?

Nein eher einfacher. Ich finde das OOP logischer ist als Struktuerierte Programmieren. Vielleicht ist die eingewöhnungszeit etwas länger aber das hängt wohl von jedem selbst ab. Es wundert mich ohnehin das du findest OOP macht’s schwer und anderer seits JAVA als Anfängersprache bezeichnest. Ich persönlich finde JAVA nämlich nich so tolle aber…

c) C++ DER standard ist

Ich meine, in der c’t oder im Heise Newsticker gelesen zu
haben, daß Java C++ abgelöst hat.

Das halte ich für ein Gerücht. Aber ernsthaft, weisst du noch aun welchen Tatsachen (Zahlen) die das festgemacht haben.

Ich sehe zwei Möglichkeiten:

  • Man orientriert sich an OOP, das ist sicherlich allgemein
    zweckmäßig und auch marktgerecht. Hier würde ich einem
    Anfänger eine Sprache empfehlen, die einem den Einstieg in OOP
    einfach macht, idealerweise Smalltalk, Eiffel oder sogar etwas
    wie Self, aus praktischen Erwägungen Java.

Das ist die Möglichkeit die ich für sinnvoll halte. Aber mir C++, Delphi oder JAVA. Nicht weil ich Smalltalk oder Eiffel schlecht finde aber als Anfänger solls hat schnell auch mal irgendwo blincken oder so. Sprich: Man muß was vorzuzeigen haben. Außerdem sind viele Eiffel/Smalltalk Entwicklungsumgebungen abschreckend für Einsteiger. Da sind die C++, Delphi und Java Teile weit weit besser.

  • C und seine Nachfahren decken wahrscheinlich mehr als 80%
    des Marktes ab, also ist es eine gute Wahl für eine
    prozedurale Sprache. Zudem lernt man zwangsläufig Dinge über
    Computer, die einem in jedem Fall helfen können.

Wenn er wirklich mit C anfangen möchte hab ich ja gar nichts dagegen. C ist eine sehr schöne Sprache und wenn man sie Anständig lernt (Stil!) dann kann man auch gut damit Programmieren. Da er auf Linux programmieren möchte kann er jetzt mit C anfangen und sich in ein paar Monaten auf Kylix umsteigen um mit OOP anzufangen. Daraufhin stehen im immer noch alle Wege offen.

Wenn man gut in C und Java ist, ist C++ wirklich
kinderleicht. Keine Wunder, C++ ist aus C abgeleitet, Java aus
C++.

Das geht auch von hinten. Wer C++ kann hat mit C kein problem und das erlernen von Java fällt kinderleicht.

Vieleicht sollte er auf C# warten - das ist dann einfacher als
C++ und JAVA.

Chash für Linux? Nicht in diesem Jahrhundert.

Alles was ich über C sharp gehört habe war sehr beeindruckend. Ich denke die Sprache hat potential.

Gruss,
Matthias Thoma

Moin,

Ich empfehle C++ zu lernen. Weil es
a) es nicht viel schwerer als C ist.

Der ganze Bereich OOP macht es nicht viel schwerer?

Nein eher einfacher. Ich finde das OOP logischer ist als
Struktuerierte Programmieren.

Ja! Es geht aber darum, BEIDES zu lernen. Du wirst C++ nicht lernen könne, ohne C zu lernen. Genau die Mischung aus einer extrem reifen und weit verbreiteten Sprache mit OOP-Elementen macht ja C++’ Mächtigkeit aus. Genau mit diesem pragmatischem Ansatz ist C++ erfunden worden. Genau das macht sie für ANFÄNGER ungeeignet.

Es wundert mich ohnehin das du findest OOP macht’s schwer und :anderer seits JAVA als Anfängersprache bezeichnest.

Ich habe nur behauptet, daß es der zusätzliche Teil OOP schwerer macht. Oder willst Du C++ lernen, Pointer aber auslassen?

Ich meine, in der c’t oder im Heise Newsticker gelesen zu
haben, daß Java C++ abgelöst hat.

Das halte ich für ein Gerücht. Aber ernsthaft, weisst du noch
aun welchen Tatsachen (Zahlen) die das festgemacht haben.

Wüßte ich’s, hätte ich es dazugeschreiben. Darum habe ich das auch so vorsichtig formuliert.
Wenn ich dran denke, werde ich nachher mal auf der c’t-ROM nachsehen.

Ich sehe zwei Möglichkeiten:

  • Man orientriert sich an OOP, das ist sicherlich allgemein
    zweckmäßig und auch marktgerecht. Hier würde ich einem
    Anfänger eine Sprache empfehlen, die einem den Einstieg in OOP
    einfach macht, idealerweise Smalltalk, Eiffel oder sogar etwas
    wie Self, aus praktischen Erwägungen Java.

Das ist die Möglichkeit die ich für sinnvoll halte. Aber mir
C++, Delphi oder JAVA.

Nur, daß C++ und Delphi noch Zeiger mitschleppen.

mit C anfangen

GENAU!!!

Daraufhin stehen im immer noch alle Wege offen.

GENAU!!!

Wenn man gut in C und Java ist, ist C++ wirklich
kinderleicht. Keine Wunder, C++ ist aus C abgeleitet, Java aus
C++.

Das geht auch von hinten. Wer C++ kann hat mit C kein problem
und das erlernen von Java fällt kinderleicht.

Das geht auch von hinten, aber das ist für einen ANFÄNGER nicht zu empfehlen.

Vieleicht sollte er auf C# warten - das ist dann einfacher
als C++ und JAVA.

Chash für Linux? Nicht in diesem Jahrhundert.

Alles was ich über C sharp gehört habe war sehr beeindruckend.
Ich denke die Sprache hat potential.

Wem antwortest Du eigentlich? Ich habe nur angezweifelt, daß es in absehbarer Zeit Chash für Linux geben wird. Die Qualität von Chash kann ich nicht beurteilen, aber Javas Plattformunabhängigkeit ist für mich ein konkreter Vorteil, da ich mit verschiedenen Plattformen arbeiten muß.

Nochmal: Wir sprechen über die ERSTE Sprache, nicht über die letzte. Daß Du einem ANFÄNGER C++ empfiehlst, ist absurd. Gleichzeitig objektorientierte Paradigmen und Pointer zu lernen, ist vielleicht möglich, erfordert aber ein großes Leidenspotential.

Mann, ich mußte noch nie so brüllen.

Thorsten

Moin,

Da ham sich ja zwei gefunden *g*

Hehe!

Kleine zwischenfrage:
OOP ist Objektorientierte Programmiersprache ?

Objektorientierte Programmierung. Dazu gehören eigentlich noch Analyse und Design (OOA&D), aber das solltest Du erstmal nur im Hinterkopf behalten.

Das System programmier Buch von Meister Herold hab ich schon.
Natürlich ohne den geringsten „C-schimmer“ eigentlich ein
Fehlkauf

Jepp. Mein erstes Buch zum Thema Programmierung war vom Erfinder von C++ selbst. Dummerweise ist das kein Lehrbuch und ergo für Anfänger so geeignet wie Ulysses für die Grundschule.

Nur um das deutlich zu machen: Dieses Buch ist für Leute geschrieben, die langjährige Erfahrung im Programmieren, auch in OOP haben. Daß es so schwierig ist, sagt also erstmal nichts über C++ aus.

Jetzt will mal ein bischen am isdnlog rumpfuschen um einige
Daten Win clients zu übergeben
JaJa bisschen viel am Anfang ?

Das hängt von Dir ab. Natürlich wirst Du nicht nach einer Woche fertig sein, aber wenn Du mit kleinen Änderungen anfängst und diese nach und nach ausbaust, ist das schon OK.

Viel Spaß jedenfalls!

Thorsten

Ich denke wir brachen den Thread hier ab. Falls der orignale
Fragesteller (oder jemand anders) noch Fragen hat kann gerne per e-mail schreiben. Wer mit mir in einem vernünftigen Ton schreibt bekommt garantiert eine Antwort (im selben Stil). Ich habe es nicht nötig das mir die Worte im Text umgedreht werden.

Wem antwortest Du eigentlich?
Wüßte ich’s, hätte ich es dazugeschreiben.

Nehme ich jetzt mal Kommentarlos zur Kenntniss.

Gruss,
Matthias Thoma

Moin,

Ich denke wir brachen den Thread hier ab.

Schade eigentlich.

Ich habe es nicht nötig das mir die Worte im Text umgedreht
werden.

Da bin ich ja gespannt: Wo habe ich das denn gemacht?

Thorsten

Nachdem ich nochmal darüber nachgedacht habe, bin ich richtig ärgerlich.

Die gegebene Fragestellung war nicht, ob man KDE weiter in C++ entwickeln sollte. Ein Anfänger wollte wissen, welche Sprache er lernen sollte, um mit Linux 'rumzuspielen.

  • Du behauptest daraufhin, daß C++ ein tolle Sprache ist, die man lernen sollte.
  • Ich behaupte daraufhin, daß C++ ein tolle Sprache ist, die man lernen sollte, daß aber die Aspekte, die die Mächtigkeit ausmachen, eine steile Lernkurve nach sich ziehen, zwangsläufig steiler als die der Untermenge C.

Nachdem Du also eine zeitlang nicht zur Kenntnis genommen hast, daß Du ein Problem lösen willst, das niemand hat, behauptest Du, ich würde Dir die Worte im Mund umdrehen.

Nehme ich jetzt mal Kommentarlos zur Kenntniss.

Diesen Satz kommentiere ich jetzt mal nicht, das wäre nämlich Nachtreten (sic!).

Ich möchte hier mal jemanden treffen, der am Ende sagen kann, daß er Unrecht hat.

Thorsten