Hilfe, ich muss C lernen ... und schon fangen die Probleme an

coricora

coricora

Neues Mitglied
Thread Starter
Dabei seit
29.10.2008
Beiträge
18
Reaktionspunkte
0
Hallo,

ich habe ein Problem: ich muss jetzt C lernen und dachte, dass ich das mit dem Buch "C - Programmieren von Anfang an" von Helmut Erlenkötter machen könnte.

Aber schon bei meinem ersten Mini-Programm bekomm ich eine Fehlermeldung:

Code:
#include <stdio.h>
main() {
printf("\nDies ist mein letztes C-Programm.\n");
}

Fehlermeldung:

collect2: ld returned 1 exit status


Was hab ich falsch gemacht? Sorry, wenn ich mich so dumm anstelle ... dabei bin ich nicht einmal blond. ;-)

Lernende Grüße

Cora
 
da ist eigentlich kein fehler.. vielleicht fehlt der rückgabewert von der main funktion, aber.. eigentlich sollte das laufen ;)


Code:
radon:code xentric$ cat test.c 
#include <stdio.h>
main() {
printf("\nDies ist mein letztes C-Programm.\n");
}
radon:code xentric$ 
radon:code xentric$ gcc test.c 
radon:code xentric$ ./a.out 

Dies ist mein letztes C-Programm.
radon:code xentric$

Womit übersetz du das denn? Hast du nen gcc installiert? Bzw Xcode?

Ah so, ld ist der linker. Wüsste nicht, was es bei stdio.h und printf großartig an fehlern geben sollte..
 
Hab es gerade mal versucht (auch mein erstes Programm auf dem Mac :))
In XCode ein neues Projekt (Standard Tools Projekt) angelegt. Deinen Sourcecode eingegeben und gestartet, funktioniert ?
 
es müsste so gehen:

#include <stdio.h>
void main() {
printf("\nDies ist mein letztes C-Programm.\n");
}

Wenn Du für main() keinen Rückkehrwert angibst, wird als Funktionstyp int angenommen.
Da Du aber keine return(<wert>) Anweisung gegeben hast, bekommst Du eine Laufzeitwarnung, weil Dein Programm einen unbekannten Returncode in das Environment zurückgibt.
 
Besser wäre:

#include <stdio.h>
int main( int argc, char ***argv) {
printf("\nDies ist mein letztes C-Programm.\n");
return 0;
}


Vermutlich hast du ein falsches Projekt-Template verwendet. "ld" ist der Linker der die Laufzeitumgebung des Betriebssystems mit deinem Code verknüpfen will, d.h. der Fehler tritt schon bei der Programmerstellung nicht beim Ausführen auf.
 
:cake:

Danke für die Hinweise. Jetzt hat's auch bei mir geklappt und ich kann endlich weitermachen.
:)
 
Viel Spaß :)
 
würde eher von der variante mit int main.. abraten..

die richtige für nen anfänger wäre halt schon void main

warum denn c lernen? finde die programmiersprache
eher sehr unübersichtlich.. warts mal ab wenn du
mit pointer zu tuen hast.. bissl kompliziert das ganze,
aber wenn mans gepeilt hat, ganz easy..

würde dir eher java oder c# raten, falls wählen kannst..
 
Die Sprache C ist super zum Anfangen. Ich bin froh, daß ich damals C gelernt habe.
Aber ich denke anhand eines Buches wird das sehr schwierig.
Ich habe das Büchlein auch und finde es sehr gut, aber eher zum daheim nachschlagen und nicht zum ganz neu lernen.

C ist (für mich) die Mutter aller Programmiersprachen und entsprechend schwierig, wie schon erwähnt, wenn du es mit Zeigern zu tun bekommst, da muss man schon einige Knoten aus dem Hirn winden.

Kommt ja auch darauf an, wie tief du einsteigen musst.
Da du "ich MUSS C lernen" schreibst, nehme ich an, daß du es nicht freiwillig machst...

Ich habe Jahrelang C und C++ Programmiert und steige gerade auf C# um
Das ist ne Katastrophe! Dinge die mit C++ mit ein paar Zeilen Code erledigt waren wuchern zu zehn oder zwanzig Zeilen, also neee.
Ich finds einfach nur umständlich ein normales Char Array wuchert zu einem Objekt...

Also wenn du programmieren lernen willst und es dir aussuchen kannst, kommt natürlich drauf an für welchen Zweck, dann Java oder C#...wie schon geschrieben.

Wobei ich nichts wüsste, was man auch noch in 20Jahren nicht mit C/C++ realisieren könnte...C wirds immer geben, alles andere ist nur aufgebauschtes Zeugs...
Sorry fürs OT:)
 
würde eher von der variante mit int main.. abraten..

die richtige für nen anfänger wäre halt schon void main

warum denn c lernen? finde die programmiersprache
eher sehr unübersichtlich.. warts mal ab wenn du
mit pointer zu tuen hast.. bissl kompliziert das ganze,
aber wenn mans gepeilt hat, ganz easy..

würde dir eher java oder c# raten, falls wählen kannst..

Warum ?
Laut Standard ist das sogar falsch, obwohl es üblicherweise von den gängigen Compilern akzeptiert wird:
Gefordert ist:
int main() oder
int main( int argc, char **argv )

Das System erwartet normalerweise einen Rückgabewert vom Typ "int" von der main-Funktion als Ergebnis der Programmausführung. Mit "Void" wäre das Ergebnis unbestimmt, obwohl wie gesagt jeder damit umgehen kann :)

Außerdem denke ich als eine der nächsten Fragen kommt ohnehin: Wie gebe ich meinem Programm Parameter mit auf den Weg und man ist doch wieder bei der Variante 2 :))
 
Gefordert ist:
int main() oder
int main( int argc, char **argv )

Das System erwartet normalerweise einen Rückgabewert vom Typ "int" von der main-Funktion als Ergebnis der Programmausführung.

Rischtisch.

Die normalen Rückgabewerte für *nix sind im Übrigen EXIT_SUCCESS oder EXIT_FAILURE

Alex
 
Es kommt aber auch drauf an, welchen Standard verwendet wird. :) Siehe http://de.wikipedia.org/wiki/Varianten_der_Programmiersprache_C (Unten die Beispiele)

Zudem finde ich C eher geeignet für Anfänger. Um erst einmal die Logik und das Programmieren allgemein zu erlernen, hilft die einfache Syntax von C.

Ich bin natürlich vom aktuellen Standard ausgegangen :D

Ob C oder Java oder C# oder was weiss ich richtig ist lässt sich schwer sagen. Auf sollte die Herangehensweise zur Lösung eines Problems auf die jeweilige Wahl zugeschnitten sein, wenn ein entsprechendes Ergebnis herauskommen soll, da sie Ansätze sich doch erheblich unterscheiden, zumindest was C und Java betrifft. Mit C++ kann man sicher auch ein C-Programm schreiben, was aber nicht Sinn der Sache sein sollte.

Aber wir wollen Coricora nicht verschrecken :D:D
 
Zudem finde ich C eher geeignet für Anfänger. Um erst einmal die Logik und das Programmieren allgemein zu erlernen, hilft die einfache Syntax von C.

Das möchte ich so nicht stehen lassen. C ist eine Programmiersprache, die viele Schweinereien erlaubt und damit recht flexibel ist. Die meisten modernen Programmiersprachen lassen sich auf C zurückführen. Allerdings versaut es einen Anfänger auch in der Sichtweise auf die Dinge.

Worauf will ich hinaus? Möchte der Anfänger nur ein wenig programmieren, würde ich jederzeit Java empfehlen. Man muss sich nicht um Speichermanagement kümmern und hat eine große Laufzeit-Bibliothek mitgeliefert. Auch das Bauen von Programmen ist auf Anfängerniveau hireichend einfach.
Für Leute die mehr wollen, würde ich dort auch den Einstieg sehen. Diese Sprache deckt alle wichtigen aktuellen Paradigmen ab. Parallel zur Sprache sind dann aber auch Konzepte zu lernen um den Umstieg auf andere Sprachen zu erleichtern. (Bekannt? Richtig, die meiten Unis arbeiten so.)

C hat in meinen Augen für den Einsteiger zwei große Hürden:
1) Speichermanagement. Viele haben große Schwierigkeiten, zu verstehen, wie Speicher reserviert, adressiert und wieder frei gegeben wird. Das ist aber zentraler Bestandteil der Sprache. Da zählt übrigens auch das Pointer-Prinzip hinein.
2) Bibliotheken gibt es zwar auch wie Sand am Meer, man muss sich aber dann mit Kommandozeilenoptionen quälen, um die Bibliotheken einzubinden. Ein Anfänger würde davon erschlagen, wobei er recht früh damit konfrontiert wird, da die Laufzeitumgebung per se keine Bibliotheken automatisch mit bringt.

C und viele seiner Abkömmlinge wie C++ und Objective-C sind für meinen Geschmack keine Einsteigersprachen. Sie erschlagen den geneigten Anfänger mit ihrem Funktionsumfang.
 
Wie schon richtig festgestellt wurde: ich MUSS C lernen. :-( Ich selbst hätte mir mit Sicherheit was anderes ausgesucht, wenn ich die Wahl gehabt hätte. Hatte ich aber nicht und so fress ich mich eben durch das oben genannte Buch. Komme auch recht gut voran und hab jetzt endlich auch meine Erfolgserlebnisse. Noch knapp 10 Seiten und dann komme ich zu den Pointern ... bin mal gespannt, ob ich das raffe. ;-)

Aber jetzt mal eine andere Frage in dem Zusammenhang, wo hier doch so fleißig diskutiert wird, was für Anfänger jetzt gut/besser geeignet ist:

Meine beiden Neffen (15 und 17) sind total begeistert vom iPhone, haben auch schon jede Menge Ideen, was man damit machen könnte und wollen jetzt programmieren lernen. Vorkenntnisse sind allerdings in dieser Richtung bisher nur HTML, CSS, Flash/Actionscript und Javascript vorhanden.

Was würdet Ihr sagen, wie die am besten anfangen könnten? Erst Java, dann Objective-C und dann ran ans SDK? Oder besser erst C#, C++ oder C? Oder gleich mit Objective-C starten? Oder, oder, oder?

Bin auch für Literaturempfehlungen sehr dankbar, denn dann hab ich schon gleich feine Weihnachtsgeschenke. ;-)

Cora
 
naja, wenn man von C/C++ kommt, dann ist die syntax in Obj-C schon sehr gewöhnungsbedürftig...
 
coricora schrieb:
Erst Java, dann Objective-C und dann ran ans SDK? Oder besser erst C#, C++ oder C? Oder gleich mit Objective-C starten? Oder, oder, oder?

Vorsicht! Objektorientiert ist hier nicht immer gleich Objektorientiert. Java gehört vom Grundsatz her zu den C Sprachen und verfolgt einen anderen eher statischeren Ansatz.

Objective-C geht da einen ganz anderen Weg ( von der Sprache Smalltalk kommend). Es hilft da also wenig C++ oder Java zu lernen - im Gegenteil. Wenn iPhone oder Programme für OS X dann gleich Objective-C lernen. Und Achtung: das ist mehr als nur die Programiersprache lernen da gehören sog. Patterns ( etablierte Verfahrensweisen) mit dazu. Es ist also mit dem erlernen der Sprachsyntax ( die ist nicht viel größer als die von C) bei weitem nicht getan!
 
Allgemein würde ich für Anfänger "JAVA" empfehlen. Die Unterstützung und das Erfolgserlebnis ist am größten und der Code ist kann trotzdem effektiv sein.

Als Anfänger vielleicht gut zu lesen das Buch "Java ist auch eine Insel", gibt es auch kostenlos Online im Netz.

Wenn das Endziel der Programmierung tatsächlich Objective-C sein soll, dann sollte man wahrscheinlich direkt damit beginnen. Tutorials gibt es auch Online, z.B.:

http://www.infobliss.at/objc/obc001_index.htm
 
die Motivation war in diesem konreten Fall das iPhone und da macht eigentlich nur Objective-C/Cocoa Sinn :)
 
Zurück
Oben Unten