PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Möchte anfangen in C zu programmieren. Wie anfganen?



exs
17-02-2005, 19:52
Nach 3 jähriger Benutzung von Linux, möchte ich nun langsam anfangen auch was für Linux zu coden. Ich habe gehört, dass die meisten Programme für Linux in C gecoded wurden. Meine frage ist nun, wieso? ist c++ nicht besser? einige meiner Freunde meinen das zumindest.

Als ich anfieg in PHP zu programmieren, kaufte ich mir ein nettes Buch, was anhand von Beispielen interessanter und allgemeingebräuchlichen Programmen den Code erklärte und so langsam in die Sprache einwies. Ich würde mir gerne ein solches Buch für C/C++ von euch empfehlen lassen.

Und wie habt ihr eigentlich angefangen c/c++ zu lernen? Und wie lange hat es gebruacht bis ihr einigermaßen was ordentliches coden konntet? Ich weiss, die letzte Frage ist etwas schwer zu beantworten, aber versucht es trotzdem mal. Oder vergleicht es mit anderen Sprachen. PHP habe ich in einem Monat gelernt und konnte danach relativ gut PHP coden. Natürlich hat man nie ausgelernt, aber nach einem Monat hatte ich eine gute Basis. HTML habe ich in 2 Monaten gelernt. Natürlich kam es die ganze Zeit drauf an was für Lust/Zeit ich hatte, aber im groben und ganzem habe ich 2 Monate gebraucht.

jeebee
17-02-2005, 20:38
also ich hab mir die grundlagen von c anhand des buches "easy c" vom Markt&Technik-Verlag angeeignet (ISBN 3-8272-6503-7, M&T-Nummer: 26503).
ich finde dieses Buch sehr gut, ich habe damit die wichtigsten elemente von c in wenigen (3-4) wochen gelernt und bin jetzt daran, mich mit dem GTK-Toolkit auseinanderzusetzen.

peschmae
17-02-2005, 20:43
Nach 3 jähriger Benutzung von Linux, möchte ich nun langsam anfangen auch was für Linux zu coden. Ich habe gehört, dass die meisten Programme für Linux in C gecoded wurden. Meine frage ist nun, wieso? ist c++ nicht besser? einige meiner Freunde meinen das zumindest.

Unter anderem weils 1983 als das GNU-Projekt mit seiner Arbeit begann noch kein C++ gab.
Besser ist sowieso relativ. Für GUI-Anwendungen hat C++ - d.h. Objektorientierung natürlich schon was für sich.



Und wie habt ihr eigentlich angefangen c/c++ zu lernen?

Mit so nem MFC-Buch. Bin aber gescheitert. Nachher mit dem Stroustroup (The C++ Programming Language), war recht heftig - würde ich nicht unbedingt zum Anfangen empfehlen es sei denn man kennt schon was sehr ähnliches (C, Java oder so).


Und wie lange hat es gebruacht bis ihr einigermaßen was ordentliches coden konntet? Ich weiss, die letzte Frage ist etwas schwer zu beantworten, aber versucht es trotzdem mal. Oder vergleicht es mit anderen Sprachen. PHP habe ich in einem Monat gelernt und konnte danach relativ gut PHP coden.

Ein halbes Jahr etwa. Ungefähr würde ich sagen. Kommt halt drauf an wie du anfängst und was du unter brauchbar verstehst.

Ich weiss allerdings nicht ob C/C++ wirklich das richtige für dich ist. Du töntst eher unentschlossen. Da würde ich mir sowas eher nicht antun.
Es kommt natürlich drauf an was du für Programme machen willst, aber vieles geht mit anderen Sprachen leichter und du hast weniger mühsame Probleme.

MfG Peschmä

locus vivendi
17-02-2005, 21:18
Ich habe gehört, dass die meisten Programme für Linux in C gecoded wurden. Meine frage ist nun, wieso?
Teilweise aus Tradition, teilweise aus Voreingenommenheit, teilweise weil C (etwas) einfacher zu unterstützen ist als z.B. C++, teilweise weil manche (ältere) Tools mehr auf C zentriert sind, teilweise einfach persönlicher Geschmack, teilweise weil die Entwickler ausser C nichts gelernt haben, ...


ist c++ nicht besser?
Im Vergleich zu C, ja. Das kann man meiner Meinung nach behaupten ohne unfair zu sein. C++ ist zu einem sehr großen Teil einfach eine Erweiterung zu C. Fast alles was es in C gibt, gibt es auch in C++. Das einzige was gegen C++ und für C spricht, ist eigentlich, das das Entwicklungssystem (Compiler hautpsächlich) umfangreicher ist. Allerdings sollte ich dazusagen, das vermutlich kaum jemand der C++ verwendet, nicht früher oder später auch Features verwendet die es in C nicht gibt. Ich denke das spricht für C++. Nun weisst du, das ich C++ besser finde, ich würde dir auch (zumindest im Gegensatz zu C) raten C++ zu lernen. Ich möchte dich aber nicht "auf Teufel komm raus" beeinflussen C++ zu lernen. Ich würde dir aber unbedingt raten, solltest du dich für C++ entschliessen, dir den Spass daran nicht durch unsachliche Kritik von anderer Stelle an C++ verderben zu lassen. Leider ist zu beobachten das viele Fans einer bestimmten Sprache die Neigung haben, andere stärker und unfair zu kritisieren. Und gerade gegen C++ richtet sich sehr viele Kritik, mehr als an anderen Sprachen. C++ hat Probleme, das stimmt natürlich. Aber andere Sprachen auch.


Und wie habt ihr eigentlich angefangen c/c++ zu lernen?
Schritt für Schritt, bei C angefangen, dank einem sehr einfachen Buch motiviert gewesen. Schließlich sehr bald auf C++ umgestiegen, ich weiß aber nicht mehr genau warum. In C++ sehr unstrukturiert weitergelernt. Schließlich auch versucht da mit Hilfe von Büchern "Struktur" reinzubringen. Naja, und ausgelernt hat man nie.

Damit ist aber nicht gesagt, das ich dir raten würde, so zu starten. Das versteht sich glaube ich von selbst.


Und wie lange hat es gebruacht bis ihr einigermaßen was ordentliches coden konntet?
Kann ich immer noch nicht, aber ich möchte nicht die Schuld auf C++ schieben...

exs
17-02-2005, 21:44
Hm, ok, ich bin wirklich sehr unentschlossen und ich habe auch nicht wirklich Ahnung was ich lernen sollte bzw. welche Sprache meinen Ansprüchen am besten gerecht werden würde. Ich kam auf C bzw. C++ nur weil es hieß dass es eine sehr gängige Sprache ist und die meisten Linuxprogramme darin programmiert worden sind.

Was ich programmieren möchte? Das ist eine gute Frage. Ich denke da hauptsächlich an irgendwelche GUI-Anwendungen. Bzw. vielleicht irgendwann an kleine Tools für mittelgroße Aufgaben.

Ich kenne mich eigentlich nur in Scriptsprachen aus. Und an diesen Scriptsprachen hat mich realtiv viel daran genervt, dass man sehr schnell an die Grenzen kommt. Daher möchte ich mal eine Sprache lernen, in der man alles realisieren kann, was möglich ist.

Daher habe ich angefangen in Delphi zu programmieren. Aber unter Linux hat man sowas leider nicht und Kylix unter Linux zu kompilieren (ist im apt von sarge leider als binary nicht vorhanden), dafür bin ich leider zu faul.

Aber ich wäre gerne für eine Sprache, was sehr ähnlich sein sollte wie Delphi und in der man mit der Maus die ganze GUI erstellen kann (Buttons platzieren etc).

peschmae
17-02-2005, 22:49
Was ich programmieren möchte? Das ist eine gute Frage. Ich denke da hauptsächlich an irgendwelche GUI-Anwendungen. Bzw. vielleicht irgendwann an kleine Tools für mittelgroße Aufgaben.

Ich kenne mich eigentlich nur in Scriptsprachen aus. Und an diesen Scriptsprachen hat mich realtiv viel daran genervt, dass man sehr schnell an die Grenzen kommt. Daher möchte ich mal eine Sprache lernen, in der man alles realisieren kann, was möglich ist.

Grenzen in Bezug auf was? Und von was für Scriptsprachen sprichst du hier? (Php?)
Fürs alles machen sind C/C++ natürlich geeignet. Aber eigentlich (mit Ausnahme von Microcontroller/Lowlevel/Betriebssystemzeugs) Sprachen wie Java oder Python auch.
Mit Python gehen auch mittelgrosse Anwendungen - ein Beispiel was mir gerade im Kopf ist ist Sketch - ein Vektorgrafikprogramm. Die Mehrzahl der GUI-Anwendungen in dem Bereich ist aber tatsächlich C (die Gtkler) und C++ (die Qt/KDEler).



Daher habe ich angefangen in Delphi zu programmieren. Aber unter Linux hat man sowas leider nicht und Kylix unter Linux zu kompilieren (ist im apt von sarge leider als binary nicht vorhanden), dafür bin ich leider zu faul.

Je nach dem wie gut du Delphi kennst und wie gut dir das gefällt auch mal http://lazarus.freepascal.org angucken. Allerdings ist Pascal/Objekt Pascal unter Linux eher ein Nischenprodukt.

Kylix ist eher gescheitert. Und bei Debian ist das wegen der unfreien Lizenz sowieso nie zu finden gewesen :)
Deswegen wird auch nix mit Kylix kompilieren (war eventuell auch nur ein verschreibsler).



Aber ich wäre gerne für eine Sprache, was sehr ähnlich sein sollte wie Delphi und in der man mit der Maus die ganze GUI erstellen kann (Buttons platzieren etc).

Das ist Sprachunabhängig grundsätzlich. GUI-Builder gibts für ziemlich jedes GUI-Toolkit. Die GUI-Toolkits legen dich auch nicht auf eine Sprache fest - für die grösseren (Gtk, Qt, WxWidgets) kannst du so jede der gängigeren Sprache verwenden.

MfG Peschmä

panzi
17-02-2005, 22:58
Also wenn du eine Sprache wie C _oder_ C++ lernen willst, dan würde ich dir zu C++ raten. Die objektorientierten Konzepte sind einfach ne Intelegente Idee!
Aber wenn du nicht "hardcore" Programmieren willst, und nur ein paar kleine Tools schreiben willst, dann nim doch Python (oder meinetwegen TCL/TK). Und mit Python kann man auch GUI Anwendungen schreiben. wxPython, PyQt und KDE Bindings gibts denk ich auch. Python ist eine nette, objektorientierte, dynamische Skriptsprache und auf python.org gibts einige Tutorials, die hilfreich sind. Naja, weiß net ob ein Anfänger mit den Objektorientierten Konzepten sofort gut umgehn kann, das sollte man wohl zuerst (relat. trocken) lernen. Dann will man aber auch keine Sprache mehr verwenden, die nicht objektorientiert ist. ;)

Und wenn du tatsächlich C++ lernen willst, dann kann ich dir nur diese PDFs seeeeeehr empfehlen. Hab mir damals C++ mit diesen Unterlagen selbst (und mit ein wenig Hilfe eines Freundes) beigebracht. Lies drinn alle Texte, nichts auslassen. Wirkt zwar zuerst ein klein wenig trocken, aber dann verstehst die zusammenhänge nacher besser. Jedenfalls hat all das erklären des Profs, den ich in Programmieren ghabt hab weniger bracht, als die PDFs. Ich hab mir die PDFs auch schon bevor ich auf die EDVO ging angeschaut (ein Monat in den Sommerferien davor), und wärend der ganzen Kollegzeit hab (hätt) ich nur einen Bruchteil von dem gelenrt, was in den paar PDFs drinn steht. Einen Monat in den Ferien diese PDFs durcharbeiten, und man kann die C++ Basics auch wirklich. (Die Version dieser Unterlagen, die ich damals noch verwendete, war noch ne ältere.)

http://www.bw.fh-deggendorf.de/kurse/cpp/index.html

pulp
18-02-2005, 02:33
hi,

lern bitte KEIN pyhton oder tcl oder sonstwas ausser c oder c++ !
das aus einfachen grund: du schreibst nen später nen super program und keiner wird es verwenden weil es es in python oder in java oder sonstwas geschrieben ist. kein programierer hat lust fuer nen pyhton etc program nen patch zu schreiben oder fehler zu suchen. was ja 95 % der software bestätigt.

zu c oder c++.: lern 1-2 wochen lang c und danach 1-2 wochen lang c++.

c tutorial zum blei bei: pronix.de

gruss pulp

sowatt
18-02-2005, 04:22
Hi,
@pulp: Na das sind aber sehr gewagte Aussagen die Du da tätigst.
Und meiner Meinung nach überhaupt nicht zu vertreten.
Die Masse an Java,-Python,-Perl und PHP-Programmierer ist doch
wohl groß genug um sich eines Projektes anzunehmen(wenn es denn Sinn macht)

Außerdem jemandem zu raten erst 1-2 Wochen C zu lernen um dann mit C++
zu beginnen, ist wohl einer der am meisten umstrittenen Punkte im Coderlager.
Stroustrup schreibt in seinem Buch das er von dieser Vorgehensweise abrät.

Wenn man noch unentschlossen ist was das lernen einer Programmiersprache
angeht, dann sucht man sich seine bevorzugten Interessengebiete für das
Coden aus und Vergleicht die Konzepte verschiedener Sprachen auf Ihre
Eignung. Dann kann man sich einige Sourcen anschauen und für sich prüfen
ob einem das in der Form liegt(z.B. finde ich Python sehr gewöhnungsbedürftig
wegen der fehlenden Klammern und der Einrückung).

MfG
sowatt

fuffy
18-02-2005, 07:59
Hi!


Die Masse an Java,-Python,-Perl und PHP-Programmierer ist doch wohl groß genug um sich eines Projektes anzunehmen(wenn es denn Sinn macht)
Gibt ja auch schon so einige GUI-Anwendungen, die in Python geschrieben sind.


Außerdem jemandem zu raten erst 1-2 Wochen C zu lernen um dann mit C++ zu beginnen, ist wohl einer der am meisten umstrittenen Punkte im Coderlager.
Ack. Wenn man erst mal Funktionen wie gets gelernt hat, muss man sich erst mal auf die sichereren Methoden wie cin.getline umstellen. Meist kommt dabei ein Mischmasch aus C und C++ raus.


z.B. finde ich Python sehr gewöhnungsbedürftig
wegen der fehlenden Klammern und der Einrückung
Immerhin zwingt Python einen so, den Code sauber zu strukturieren. Wenn ich mir da manchen C++-Code anschaue. *grusel*
Ich rücke in C-like Sprachen ohnehin wie in Python ein.

Gruß
fuffy

exs
18-02-2005, 23:43
So, danke schonmal für eure Antworten. Ich habe mir ein Ebook gezogen und da stand, dass man unbedingt mit C++ anfangen sollte, wenn man nicht schon in C programmiert. Meine Problem ist nun das Kompilieren. Anscheinend werden die Headerfiles nicht gefunden und über locate <headerfile> werden sie auch nicht gefunden. Ich habe bereits folgende Pakete installiert

gcc gcc-3.3 binutils libc6-dev

Was fällt mir noch? (Benutze Debian Sarge)

Edit:
Damit anschaulicher wird hier nochmal der Source meines ersten Programms, was sich nicht kompilieren lässt.


#include <iostream>

int main()
{
cout << "Hello World\n";
return 0;
}
Und das ist das eigentliche Problem.

exs@tux:~/compiler$ gcc -o bla program.c
program.c:1:20: iostream: Datei oder Verzeichnis nicht gefunden
program.c: In Funktion »main«:
program.c:5: error: `cout' undeclared (first use in this function)
program.c:5: error: (Each undeclared identifier is reported only once
program.c:5: error: for each function it appears in.)

PS: iostream.h wird auch nicht gefunden.

panzi
19-02-2005, 00:58
Du hast ein C++ Programm geschrieben. d.h. du musst erstens g++ statt gcc verwenden und zweitens die Source-Datei als .cpp statt .c speichern (.C wird selten auch verwendet).
Und dann, wenn du die "neuen" Header ohne .h verwendest (was auch zu empfehlen ist), dann musst du auch den namespace beachten, in dem die verwendeten Klassen/Funktionen/Bezeichner liegen. Und der ist std.

Also so müsste der Source aussehn:

#include <iostream>

int main()
{
std::cout << "Hello World\n";
return 0;
}
Oder aber du sagst ein für alle mal, das du alles aus dem namespace std verwenden willst:

#include <iostream>

using namespace std;

int main()
{
cout << "Hello World\n";
return 0;
}
Und das geht denk ich auch, um anzugeben, das du cout (und nur das) aus std gleich ohne std:: prefix verwenden willst:

#include <iostream>

using std::cout;

int main()
{
cout << "Hello World\n";
return 0;
}
Namespaces sind dazu gut, um sicher zu gehn, das es keine Namenskonflikte gibt. Also in lib A gibts eine funktion die foo heißt, und in lib B ebenfalls. Welche Funktion ist bei Aufruf nun gemeint, wenn du in deinen Projekt beide libs verwenden willst/musst? Wenn die libs namespaces verwenden ist das kein Problem.

A.h

#ifndef A_H__
#define A_H__

namespace A {
void foo( int bar );
}

#endif

B.h

#ifndef B_H__
#define B_H__

namespace B {
void foo( int bar );
}

#endif

Du kannst dann in deinen Programm A::foo(x) oder B::foo(x) verwenden. ;)

Soll ich auch noch erklären was das #ifndef, #define und #endif soll? Das sind Präprozessor Makros, die ausgeführt werden, bevor der C/C++ Kompiler den Source zu gesicht bekommt. Hier dienen sie dazu, das wenn in deinen Programm, warum auch immer, der Header >1 mal #included wird, alle Deklarationen trotzdem nur einmal eingefügt werden (sonst würd der Kompiler mekern: Redeklaration von ...).
Und konkret wird dies bewerkstelligt, indem man abfragt, ob ein spezielles Makro NICHT definiert ist, hier eben A_H__ oder B_H__ (man sieht, das der Makroname an den headernamen angelegt wird, um Kollisionen zu verweiden):
#ifndef A_H__
Dieses Makro wird definiert, wenn es nicht da ist:
#define A_H__
Dann folgt der Code und am Schluss beendet man das Präprozessor-If-Statement:
#endif
Und somit wird das zwischen #ifdef und #endif nur dann included, wenn es noch an keiner früheren Stelle included wurde. ;)

exs
19-02-2005, 01:30
Boah ey, ok das kompilieren hat geklappt.

Aber wieso steht das mit dem namespace nicht in dem Beispielcode von meinem Ebook? Nichtmal das das Kompilieren dort erklärt wird, der Code ist sogar falsch. Gibts irgendwo mal was aktuelles, wo der Beispielcode wenigstens funzt, als ebook?

peschmae
19-02-2005, 09:12
Aber wieso steht das mit dem namespace nicht in dem Beispielcode von meinem Ebook?

Weil das nicht immer Bestandteil von C++ war. Früher gabs <iostream.h> und dort ist die Sache ohne Namespaces drin. (Ist aber nicht empfohlen das heute zu verwenden).
Das Buch ist wohl einfach alt.


Nichtmal das das Kompilieren dort erklärt wird, der Code ist sogar falsch. Gibts irgendwo mal was aktuelles, wo der Beispielcode wenigstens funzt, als ebook?

Beispielcode ist am Anfang wohl eins der grössten Probleme wenn der nicht geht. Der _muss_ einfach gehen ;)

In meinen Bookmarks hats:
http://www.cpp-entwicklung.de/cpplinux2/cpp_main/cpp_main.html
http://www.bw.fh-deggendorf.de/kurse/cpp/index.html
Ich habe beide nicht gelesen/benutzt aber das zweite wurde kürzlich von locus vivendi empfohlen. :)
Dann gibts noch die beiden Bücher von Bruce Eckel:
http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
habe ich auch nicht gelesen aber vom Java-Buch vom selben Autor weiss ich dass seine Bücher recht lang zu lesen (fast zu lang) sind, d.h. eher viel Theorie und wenig Spass.
Hat mir aber im Java-Bereich sicher recht viel gebracht an Wissen über die subtitlitäten über die andere Bücher einfach hinwegschauen.

MfG Peschmä

locus vivendi
19-02-2005, 09:53
Gibts irgendwo mal was aktuelles, wo der Beispielcode wenigstens funzt, als ebook?
An dieser Stelle mal der Hinweis auf die C++ Annotations. Die sind zwar mehr eine Referenz denn ein Tuturial, aber dafür sind sie im Algemeinen korrekt und sachkundig.
http://www.icce.rug.nl/documents/cpp.shtml
(Ganz unten gehts los.)


Anscheinend werden die Headerfiles nicht gefunden und über locate <headerfile> werden sie auch nicht gefunden.
Anmerkung dazu: Die Standard-Header müssen nicht als Dateien existieren. Dass locate sie nicht findet muss deshalb kein Fehler sein. Beim GCC sind sie allerdings Dateien.

`kk
19-02-2005, 10:34
Ich weiß nicht, ob hier alles stimmt aber es sieht eigentlich recht ordentlich aus:
http://cpp-tutor.de/cpp/toc.htm

Gruß, Kai.

nobody0
20-02-2005, 13:28
Empfehlenswert sind, nach dem ersten Einstieg, die C-FAQs (als Buch), der C-Standard (C99, bei www.ansi.org online kaufbar für rd. 15 EUR) , dazu das Rationale und das Buch "Expert C Programming".