c programmieren
c programmieren
ich fange gerade an c/c++ programmieren zu lernen. ich habe das buch schon seit einiger zeit, allerdings bin ich nie dazugekommen es zu lesen.
http://www.buha.info/files/user/html/id ... D-Rom.html
das buch hab ich noch zu meiner win zeit gekauft, jedoch würd ich jetzt natürlich gerne in linux programmieren.
leider fehlt mir etwas der überblick und deshalb bitte ich euch um hilfe.
ich brauche dazu:
- editor
- compiler
- linker
- debugger
als editor nehm ich bisher (für conf dateien) normalerweise immer den vim. ich kenn den gcc vom kernel backen, aber mehr kenn ich ihn auch nicht. linker und debugger kenn ich gar keinen.
vielleicht wäre auch ein kleines howto wie man die programme in kombination bedient nicht schlecht.
danke
http://www.buha.info/files/user/html/id ... D-Rom.html
das buch hab ich noch zu meiner win zeit gekauft, jedoch würd ich jetzt natürlich gerne in linux programmieren.
leider fehlt mir etwas der überblick und deshalb bitte ich euch um hilfe.
ich brauche dazu:
- editor
- compiler
- linker
- debugger
als editor nehm ich bisher (für conf dateien) normalerweise immer den vim. ich kenn den gcc vom kernel backen, aber mehr kenn ich ihn auch nicht. linker und debugger kenn ich gar keinen.
vielleicht wäre auch ein kleines howto wie man die programme in kombination bedient nicht schlecht.
danke
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Wenn du eine IDE haben willst, nimm KDevelop (KDE) oder Anjuta (GNOME)
Ansonsten kompilierst du Programme einfach mit evtl. nötige Libraries bindest du mit "-lname" ein, z.B. "-lm", wenn du sin und cos benutzen willst.
Für C++ nimmst du g++. Wenn du debuggen willst, nimm noch die Option "-g", um Debugging-infos zu erzeugen. Das Programm kannst du dann mit gdb debuggen, (oder dem gdb-Modus von EMACS)
Optimieren kannst du mit "-OLevel" Level 2 oder 3, für Prozessoren kannst du z.B. mit "-march=pentiumpro -mfpmath=sse -msse" optimieren
Ansonsten kompilierst du Programme einfach mit
Code: Alles auswählen
gcc -o Dateiname Teil1.c Teil2.c Teil3.c
Für C++ nimmst du g++. Wenn du debuggen willst, nimm noch die Option "-g", um Debugging-infos zu erzeugen. Das Programm kannst du dann mit gdb debuggen, (oder dem gdb-Modus von EMACS)
Optimieren kannst du mit "-OLevel" Level 2 oder 3, für Prozessoren kannst du z.B. mit "-march=pentiumpro -mfpmath=sse -msse" optimieren
Re: c programmieren
Hi,mohameth hat geschrieben: - editor
- compiler
- linker
- debugger
als editor nehme ich eigentlich meist nedit oder jedit
Compiler mäßig bist Du mit dem Gnu Compiler eigenlich gut bedient
Passend dazu natürlich ld als Linker
Und Debuggen kannst Du mit ddd oder gdb
Zum Lernen und Nachschlagen finde ich immernoch das Buch von Kernigham und Ritchie
am Besten.
gruss
eC
- johnbecker
- Beiträge: 323
- Registriert: 07.08.2004 13:43:13
kdev ist aber ganz schön unübersichtlich, habs damals als noob noch nicht mal hinbekommen, ein einfaches c-prog zu schreiben/kompilieren. das teil will einem ja dann sofort makefiles etc. erstellen.. war nach 3 min. mit dem teil so verzweifelt, dass ich lindows auf ne fat-partition installieren wollte *ggJoghurt hat geschrieben:Wenn du eine IDE haben willst, nimm KDevelop (KDE) oder Anjuta (GNOME)
- penthesilea
- Beiträge: 147
- Registriert: 19.02.2003 23:51:24
- Wohnort: Ulm
ich kann diese 2 Seiten nur empfehlen
http://pronix.de/modules/C/openbook/
http://pronix.de/modules/C/linux/
und als editor benütze ich Kate und dazu halt den gcc
Gruss penthesilea
http://pronix.de/modules/C/openbook/
http://pronix.de/modules/C/linux/
und als editor benütze ich Kate und dazu halt den gcc
Gruss penthesilea
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Ohne Dir jetzt zu nahe treten zu wollen: Das ist ein "full blown IDE" mit entsprechend vielen Features und Optionen. Dass man das nicht einfach startet und alles ist gut, sollte eigentlich vorher klar sein... Wenn man nur ein einzelnes C File 'mal eben runterschreiben will, ist eine IDE ja auch irgendwie unnötig. Editor auf, Makefile schreiben (wenn überhaupt nötig), Source schreiben, kompilieren fertig.kdev ist aber ganz schön unübersichtlich, habs damals als noob noch nicht mal hinbekommen, ein einfaches c-prog zu schreiben/kompilieren
Unübersichtlich ist da einfach das flasche Wort. Normalerweise hat man einfach komplexere Projekte, und da ist KDevelop3 einfach göttlich. Für einfachere Sachen empfehle ich einfach Kate als Projekt-fähigen modernen GUI Editor... (Ist der Default Editor in KDevelop )
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
- johnbecker
- Beiträge: 323
- Registriert: 07.08.2004 13:43:13
sagen wir einfach, das teil ist "komplex" *g
.
.
wenn ich mir's recht überleg.. du nachmacher!!
tust du nicht, mal abgesehen davon, dass ich ebenfalls aus saarbrücken komm und auf den namen patrick höre.pdreker hat geschrieben:Ohne Dir jetzt zu nahe treten zu wollen: [...]kdev ist aber ganz schön unübersichtlich, habs damals als noob noch nicht mal hinbekommen, ein einfaches c-prog zu schreiben/kompilieren
.
.
wenn ich mir's recht überleg.. du nachmacher!!
vielen dank für die hilfe,
ich hab alles geschafft und hab nun eine a.out datei.
aber was nun? *g*
wie führe ich das programm aus?
ich hab alles geschafft und hab nun eine a.out datei.
aber was nun? *g*
wie führe ich das programm aus?
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Wie alle executables:
Code: Alles auswählen
./a.out
dankefluid hat geschrieben:Wie alle executables:Code: Alles auswählen
./a.out
nur mal so aus neugierde, wenn ich die datei nun auf ne diskette kopier und mitnehm auf ein windows system, wie kann ich das programm dann da ausführen?
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Die Binary-Datei kannst du afaik gar nicht ausführen, da es ein ELF[1]-Executable ist. Du kannst aber die Sourcen nehmen und auf Windows kompilieren. Achso, nicht davon verwirren lassen, dass die Datei a.out heißt obwohl es ELF ist, ist nur Tradition. Siehe dazu auch [2].
[1] http://de.wikipedia.org/wiki/Executable ... ing_Format
[2] http://de.wikipedia.org/wiki/Ausf%C3%BChrbare_Datei
[1] http://de.wikipedia.org/wiki/Executable ... ing_Format
[2] http://de.wikipedia.org/wiki/Ausf%C3%BChrbare_Datei
ich hab nun ein kleines problem.
aufgabe: "erstellen sie ein programm, das den jeweiligen legostein bedarf anhand der angegeben höhe errechnet."
drunter is so eine skizze. eine treppe aus lego steinen: oben einer, darunter dann 2, wieder darunter dann 3, dann 4, usw.
M
MM
MMM
MMMM
könnt ihr euch sicher gut vorstellen. nun hab ich ein kleines programm geschrieben. ich hab es mit dem gcc übersetzt, geht auch einwandfrei.
wenn ich es dann ausführe fragt er mich nach der höhe der treppe, aber dann kommt: "speicherzugriffsfehler" ?
aufgabe: "erstellen sie ein programm, das den jeweiligen legostein bedarf anhand der angegeben höhe errechnet."
drunter is so eine skizze. eine treppe aus lego steinen: oben einer, darunter dann 2, wieder darunter dann 3, dann 4, usw.
M
MM
MMM
MMMM
könnt ihr euch sicher gut vorstellen. nun hab ich ein kleines programm geschrieben. ich hab es mit dem gcc übersetzt, geht auch einwandfrei.
wenn ich es dann ausführe fragt er mich nach der höhe der treppe, aber dann kommt: "speicherzugriffsfehler" ?
Code: Alles auswählen
# include <stdio.h>
# include <stdlib.h>
main()
{
int h, c, steine;
printf( "Geben Sie die Hoehe an: \n");
scanf( "%d", h);
c=0;
steine=0;
for( ;c-h;c=c+1)
{
steine=steine+1+c;
}
printf( "Steine: %d\n", steine);
}
[quote][/quote]
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Hi mohameth,
Du hast da ein & vergessen. scanf braucht die Adresse einer Variablen um die Eingabe da hineinschreiben zu können.
ich hab auch noch die For-Schelife C-typischer gemacht.
und weils so schön ist, hier auch noch eine Lösung in Python:
Gruß
Dookie
Du hast da ein & vergessen. scanf braucht die Adresse einer Variablen um die Eingabe da hineinschreiben zu können.
Code: Alles auswählen
# include <stdio.h>
# include <stdlib.h>
main()
{
int h, c, steine;
printf( "Geben Sie die Hoehe an: \n");
scanf( "%d", &h);
steine=0;
for(c = 1; c <= h; c++)
{
steine = steine+c;
}
printf( "Steine: %d\n", steine);
}
und weils so schön ist, hier auch noch eine Lösung in Python:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
h = input("Geben sie die Höhe an:\n")
steine = sum(xrange(1, h+1))
print "Steine: %d" % steine
Dookie
Tjo, wie Dookie schon geschrieben hat, musst du sogenannte Pointer benutzen. Lies dazu mal http://crasseux.com/books/ctutorial/Pointers.html
Generell kann ich das ganze Buch (die ganze Seite) empfehlen.
Generell kann ich das ganze Buch (die ganze Seite) empfehlen.
oha,
darf ich fragen, nach welchem Buch Du lernst?
1. Die main() Funktion hat eine andere Signatur:
Ist aus dem Kopf, aber so in etwa (ich schreib selten C / C++ und main() noch seltener)
Das scanf muß die Adresse der Zeilvariablem bekommen. Also
Die for Schleife ist so recht unleserlich.
Bert
[edit]
Mist man sollte nicht 3 Sachen gleichzeitig machen. Dann brauch man auch nicht so lange zum schreiben
Ich würd ja lieber C++ lernen. Ist auch nicht viel schwerer, aber man gewöhnt sich gleich einen ordenlichen Stil an.
darf ich fragen, nach welchem Buch Du lernst?
1. Die main() Funktion hat eine andere Signatur:
Code: Alles auswählen
int main(char *argv[], args)
Das scanf muß die Adresse der Zeilvariablem bekommen. Also
Code: Alles auswählen
scanf("%d",&h);
Bert
[edit]
Mist man sollte nicht 3 Sachen gleichzeitig machen. Dann brauch man auch nicht so lange zum schreiben
Ich würd ja lieber C++ lernen. Ist auch nicht viel schwerer, aber man gewöhnt sich gleich einen ordenlichen Stil an.
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de
xmpp:bert@debianforum.de
Prinzipiell hast Du recht, allerdings lautet die richtige Signatur:Bert hat geschrieben: 1. Die main() Funktion hat eine andere Signatur:Ist aus dem Kopf, aber so in etwa (ich schreib selten C / C++ und main() noch seltener)Code: Alles auswählen
int main(char *argv[], args)
Code: Alles auswählen
int main(int argc, char *argv[]);
ah, vielen dank dookie, hab ich echt vergessen. aber warum hat der gcc beim übersetzen dann nicht gemeckert?? hätte ich das mit einem debugger herrausfinden können??
fluid: ist das "&h" also ein pointer? ein pointer ist ein gespeichertes wort mit bestimmter adresse, hab ich das so richtig herrausgelesen?
bert: ???
ich muss sagen dass programmieren echt spaß macht! hät ich nie gedacht. nur hab ich noch etwas probleme mit dem stil. es ist so vieles erlaubt, ich weiß net recht wie ich schreiben soll, vorallem die abstände zum linken seitenrand und das platzieren der geschweiften klammern.
hier mal mein neuestes programm, bisher mein schwerstes *stolz*
http://rafb.net/paste/results/Bu1JzO78.html
fluid: ist das "&h" also ein pointer? ein pointer ist ein gespeichertes wort mit bestimmter adresse, hab ich das so richtig herrausgelesen?
bert: ???
ich muss sagen dass programmieren echt spaß macht! hät ich nie gedacht. nur hab ich noch etwas probleme mit dem stil. es ist so vieles erlaubt, ich weiß net recht wie ich schreiben soll, vorallem die abstände zum linken seitenrand und das platzieren der geschweiften klammern.
hier mal mein neuestes programm, bisher mein schwerstes *stolz*
http://rafb.net/paste/results/Bu1JzO78.html
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
nein,
ist kein Pointer, sondern gibt dir "&h" die Adresse von dem Inhalt der Variablen "h" zurück.. also´die Adresse vom Speicher in dem der Inhalt der Variablen "h" liegt..
scanf schreibt dann einfach in diesen Speicher
Code: Alles auswählen
&h
scanf schreibt dann einfach in diesen Speicher
Die for-schleife ist übrigens schlechter Stil, besser wäre:Das ist auch so ziemlich die einzige sinnvolle Anwendung des Komma-Operators...
BTW: 1+2+3+4+5+...+N = 1+N + 2+(N-1) + 3+(N-2) + ... = N+1 + N+1 + N+1 + ... = N*(N+1)/2, statt der Schleife geht also auch ein
Code: Alles auswählen
for( c=0,steine=0 ; c-h > 0 ; c++)
BTW: 1+2+3+4+5+...+N = 1+N + 2+(N-1) + 3+(N-2) + ... = N+1 + N+1 + N+1 + ... = N*(N+1)/2, statt der Schleife geht also auch ein
Code: Alles auswählen
steine = h*(h+1)/2
Zuletzt geändert von Joghurt am 30.08.2004 11:11:16, insgesamt 1-mal geändert.
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
und wenn als Pointer deklariert und initialisiert wurde, dann darfst du wiederum kein vor dem "h" haben
hmm.. ich glaub das wird jetzt verwirrend
Code: Alles auswählen
h
Code: Alles auswählen
&
hmm.. ich glaub das wird jetzt verwirrend
Es wurde angenommen, das in 'h' die Ziel - Adresse steht.mohameth hat geschrieben:ah, vielen dank dookie, hab ich echt vergessen. aber warum hat der gcc beim übersetzen dann nicht gemeckert?? hätte ich das mit einem debugger herrausfinden können??
Ein Pointer ist ein Zeiger auf eine Speicheradresse.fluid: ist das "&h" also ein pointer? ein pointer ist ein gespeichertes wort mit bestimmter adresse, hab ich das so richtig herrausgelesen?
Was verstehst Du denn nicht?bert: ???
ich hatte aber Unsinn geschrieben. Die main() ist wie folgt deklariert:
Code: Alles auswählen
int main(int argc, char *argv[])
Code: Alles auswählen
int main()
Da gibts verschiedene Vorlieben. Schau Dir einfach mal den Code von ein paar Projekten und übernehm die Variante, die Dir gefällt.ich muss sagen dass programmieren echt spaß macht! hät ich nie gedacht. nur hab ich noch etwas probleme mit dem stil. es ist so vieles erlaubt, ich weiß net recht wie ich schreiben soll, vorallem die abstände zum linken seitenrand und das platzieren der geschweiften klammern.
Mein Hinweis: gewöhn Dir am Anfang gleich ein paar Regeln an, bei kleinen Übungsprogrammen mag das noch so gehen, bei größeren sachen nicht mehr. Und sich später einen ordentlichen Stil anzugewöhnen ist schwerer.hier mal mein neuestes programm, bisher mein schwerstes *stolz*
http://rafb.net/paste/results/Bu1JzO78.html
- verwende IMMER {} Blöcke, auch wenn Du wie im Beispiel nur ein Statement hast
- Schreibweisen wie for ( ; ;b=b/2) sind sehr schlecht zu lesen und zu verstehen
- verwende aussagefähige Variablennamen. Ich hab hier einen Kollegen, der verwendet gerne c1,c2,... als Namen. Was für ein Spaß da durchzusteigen.
Versteh mich nicht falsch. Aber schlechte Gewohnheiten sind schwer wieder abzugewöhnen. Und Du willst doch nicht, das Dein Code wie Perl aussieht?
Gruß Bert
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de
xmpp:bert@debianforum.de