AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Welches C ?

Ein Thema von xy124 · begonnen am 26. Jan 2008 · letzter Beitrag vom 27. Jan 2008
Antwort Antwort
Seite 2 von 4     12 34   
xXcomputerrookieXx

Registriert seit: 16. Nov 2007
Ort: Bielefeld
61 Beiträge
 
Delphi 7 Personal
 
#11

Re: Welches C ?

  Alt 26. Jan 2008, 17:49
Zitat von xy124:
ja und da stellt sich die Frage welches C, Welches Buch, welche Entwicklungsumgebung(die sollte nicht mehr als 50€ kosten besser: Freeware!)

Ich habe das Buch 'C - Programmieren von Anfang an' von Helmut Erlenkötter,das gleiche gibt es auch für C++ !An sich ist das Buch recht gut aufgebaut und strukturiert und mir war nie etwas unverständlich.Allerdings funktionierten die Beispiele nicht richtig und das darf in so einem Buch nicht passieren Wenn man die Quelltexte aus dem Buch in seine Entwicklungsumgebung eintippt (als erstes hatte ich 'Dev-C++',soll ja auch für C gehen; danach habe ich mir von Microsoft Visual Basic geholt)dann entstand folgendes Problem:

Nach dem Compilieren habe ich dann das Programm ausgeführt,doch nachdem sich kurz das Fenster geöffnet hat,war es gleich wieder dicht!Nach etlichen Versuchen stellte sich heraus,das im Quelltext etwas fehlte,hier mal ein Beispiel:

Delphi-Quellcode:
/* bspl0001.c */
#include <stdio.h>
int main(void){
   printf("\nDies ist ein erstes C-Programm.\n");
   printf("\nWie Sie sehen, kann 'printf' ");
   printf("nicht nur Texte drucken,\n");
   printf("sondern auch rechnen.\n\n");
   printf("13 * 7 = %i \n",13 * 7);
    getchar();
    return (0);
}
Das ist der 'richige' Quelltext,so wie er lauten muss!
Der nächste Code ist der aus dem Buch.

Delphi-Quellcode:
/* bspl0001.c */
#include <stdio.h>
main(){
   printf("\nDies ist ein erstes C-Programm.\n");
   printf("\nWie Sie sehen, kann 'printf' ");
   printf("nicht nur Texte drucken,\n");
   printf("sondern auch rechnen.\n\n");
   printf("13 * 7 = %i \n",13 * 7);
}
Zu dem Problem hatte ich hier in der DP auch mal einen Thread erstellt..

Naja wie dem auch sei,wenn die Beispiele direkt am Anfang nicht funktionieren ist das wirklich schlecht,trotzdem ist das Buch aber echt verständlich!

Weitere Buchtipps:

'Jetzt lerne ich C' von Peter Monadjemi,Eckart Winkler

'C/C++ - Von den Grundlagen zur professionellen Programmierung' von Ulrich Kaiser
Gruß Rookie

Wer kämpft kann verlieren,wer nicht kämpft hat schon verloren!
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#12

Re: Welches C ?

  Alt 26. Jan 2008, 17:58
Ich kenn das Buch zwar nicht. Aber der Author ging wohl nicht davon aus, dass man hier mit einer Windows-IDE arbeitet.
Dass das Programm gleich wieder "dicht" war, lag somit nicht am Author des Buches. Deswegen würde ich es auch nicht als schlecht bezeichnen und dass Beispiele nicht funktionieren.
Das gleiche "Problem" (was ja an sich ein normales Verhalten der IDE darstellt) hat man ja mit Delphi auch, wenn man eine Konsolenanwendung macht. Die Ergänzungen deinerseits machen die Beispiele also nicht "richtig" (die Beispiele aus dem Buch sind auch nicht "falsch").

Afaik haben die IDEs in DOS früher immer standardmäßig nach Beenden des Programms auf eine Benutzereingabe gewartet. Daher wohl auch der Stil in dem Buch.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#13

Re: Welches C ?

  Alt 26. Jan 2008, 18:11
Hi,
was man mal ganz klar sagen muss ist, dass die von Dir genannten C's (es gibt noch weitere, z.B. C-- und Objective C) komplett unterschiedliche Sprachen sind. Es wurde hier schon erwähnt, dass C++ eigentlich eine Objekt Orientierte Sprache ist (man merkt's halt nicht an jedem C++-Programm), das Gleiche gilt aber auch für C#. C# hat (wie auch schon mehrfach gesagt wurde) nicht wirklich viel mit C oder C++ gemeinsam. Wenn Du Java kannst, dann wird Dir vieles in C# bekannt vorkommen, einiges auch an Delphi erinnern (wie das Schlüsselwort override, in Java greift man eher zu Annoationen).

Ohne jetzt wirklich detailliert auf die Unterschiede eingehen zu wollen, kann man die Sprachen grob in bestimmte Kategorien unterteilen, für die diese entworfen wurden.

Ganz unten auf dem Abstraktionslevel findet man C. C ist eine sehr sehr einfache Sprache. Damit ist nicht gemeint, dass man wenig Möglichkeiten hat, ganz im Gegenteil! Es gibt aber an sich sprachlich nur wenige Elemente. C kennt eigentlich nur primitive Datentypen, Funktionen und Strukturen. Natürlich gibt es auch noch Schleifen und Bedingungen, Zeiger und Makros, aber das dürfte es schon fast gewesen sein. An sich kennt C jedenfalls keine besondere Abstraktion, keine aut. Speicherverwaltung und achtet auch nicht sonderlich auf Datensicherheit. Hierin liegen dann auch schon die Vor- und Nachteile von C.
Da C keine Abstraktion kennt und nur mit einfachen Strukturen arbeitet, kann man C sehr leicht aus anderen Sprachen heraus nutzen. Die meisten Sprachen bieten auch direkt eine Schnittstelle an um C - Bibliotheken zu verwenden (z.B. möglich unter Java, C++, Delphi, Haskell, Python, ...).
Durch die fehlende Abstraktion und die nicht vorhandene Typprüfung ist C zudem äußerst schnell in der Abarbeitung. Gleichzeitig muss man aber auch sagen, dass die Programmierung dadurch sehr viel fehleranfälliger wird. Möchte man z.B. in C auf ein Array zugreifen, übergibt man einfach nur den Zeiger auf das erste Element. Ein Array wird immer so erzeugt, dass beginnend bei dieser Adresse alle weiteren Daten linear im Speicher angeordnet werden. C weiß nur leider zu keinem Zeitpunkt, wie groß das Array ist. Erzeugt man sich ein Array mit 10 Feldern, kann man problemlos auf das 10.000te Element zugreifen. C wird diesen Fehler nicht bemerken und man greift auf einen Speicherbereich zu, den man nicht näher kennt. Was genau passiert hängt vom Programm und Betriebssystem ab, klar sollte aber sein, dass es nichts erwünschtes ist!
C zu lernen ist auf keinen Fall falsch. Man kann, wie gesagt, C als kleinsten gemeinsamen Nenner vieler Sprachen sehr gut nutzen bzw. immer mal wieder brauchen. Trotzdem heißt das auch immer, dass man auf diesen kleinsten Nenner runter gehen muss. Paradigmen wie die OOP haben durchaus einen Sinn (größere Projekte würden sich ohne viel schwieriger umsetzen und vorallem erweitern bzw. pflegen lassen!). HW - nah macht hingegen die Abstraktion wenig Sinn, ein Treiber lässt sich kaum für eine ganz andere HW wiederverwenden.
Auch ist das Lernen der C - Syntax von Vorteil, da man diese in sehr vielen Sprachen findet. So verwenden Sprachen wie C, C++, Java, Python, PHP, ... eine in vielen Elementen ähnliche Syntax. Allerdings muss man auch klar sagen, dass ein paar C - Elemente zum Glück nicht überall zu finden sind! Man kann in C sehr hässliche Konstrukte erstellen, die kaum lesbar sind. Häufig wird das ausgenutzt und Programme mit möglichst wenig LOC erzeugt. Davon muss man immer ganz klar abraten! Was Du Dir (gerade bei C, aber auch bei jeder anderen Sprache) unbedingt angewöhnen solltest ist, immer sauber zu programmieren (so dass alles gut lesbar bleibt). Zuweisungen haben z.B. nie etwas in einer if-Abfrage verloren, auch wenn's möglich ist. Auch Makros sind nur bedingt schön (erhöht nicht unbedingt die Lesbarkeit).

Ja, zu C++ wurde ja schon das Wichtigste gesagt. Die Sprache ist der Versuch C um Objekt Orientierung zu erweitern. Guter Gedanke, nur imho leider miserabel umgesetzt! An sich findet man natürlich alle Elemente der Objekt Orientierung. Eine Besonderheit, die man einfach selten bei anderen Sprachen findet besteht z.B. darin, dass auch Mehrfachvererbung möglich ist. Leider wurde aber auch versucht, zu C "abwärtskompatibel" zu bleiben. Da liegen dann auch die meisten Nachteile von C++, es gibt immer noch viel Code, der eher eine schlechte Mischung aus C und C++ darstellt, schwer lesbar und kaum wartbar ist. Liegt allerdings immer am Entwickler, das sollte klar sein. Natürlich kann man auch sehr saubere und schöne C++ Programme schreiben. Trotzdem ist hier das Konzept von Java oder C#, die einen gleich zu reiner OO zwingen und auf Präprozessor - Anweisungen (und auch den Präprozessor selbst) verzichten.
C++ hat gegenüber C eben viele weitere Möglichkeiten (Klassen und OO, Namensräume, Templates/Generizität/Polymorphie, ...).

C# wiederum ist eine Sprache, die zusammen mit dem .Net - Framework entstanden ist. Die Sprache hat auch eine C - Syntax, ähnelt aber Java in fast allen Punkten deutlich mehr als C++. Auch C# ist eine Objekt Orientierte Sprache, anders als in C++ beherscht diese aber z.B. nur die Einfachvererbung (Mehrfachvererbung kann nur über Interfaces erreicht werden).
Der eigentlich wichtigste Unterschied bei C# liegt allerdings darin, dass für die Sprache "managed code" erzeugt wird. Das managed kommt dabei aus der Eigenschaft, dass C# sich selbst um die Speicherverwaltung kümmert. Anders als in Delphi, C++, und C braucht man sich in C# nie um die Freigabe von Speicher kümmern. Wurde Speicher angefordert, so zählt C# selbst die Referenzen. Ist ein Feld, ein Exemplar einer Klasse, eine Struktur oder ähnliches nicht mehr erreichbar, so gibt C# diese automatisch frei. Es entstehen hier also nie Speicherlöcher! Zudem arbeitet C# deutlich abstrakter. Es gibt keine expliziten Zeiger mehr, man arbeitet statt dessen mit Referenzen (implizite Zeiger). Das bringt deutliche Vorteile bei der Typsicherheit (allerdings muss man auch sagen, dass C++ schon sehr typsicher ist, gerade im Vergleich mit C!).
C# arbeiet einfach viel abstrakter, für die HW - nahe Programmierung wurde die Sprache nicht entworfen. Natürlich ist es sehr praktisch, dass C# sich selbst um die Speicherverwaltung kümmert, was man dabei aber auch berücksichtigen muss ist, dass dies immer zu Lasten der Perfomance erfolgt.

Welche dieser Sprachen Du lernen solltest hängt vorallem davon ab, was Du damit machen möchtest. Wie gesagt findest Du Unterschiede in der Perfomance, sowie in den zugrunde liegenden Paradigmen. Und obohl C++ und C# objekt orientiert sind, wirst Du auch hier viele Unterschiede finden (C# eben deutlich abstrakter, strenger OO, managed und bei .Net nur in einer bestimmten Laufzeitumgebung lauffähig).
Die Programmierung von PDAs kann mit allen Sprachen möglich sein. Viele SDKs verwenden C (wie gesagt, ist fast immer der kleinste gemeinsame Nenner, da sehr einfach). C++ kommt damit auch immer in Frage (da abwärtskompatibel). Gleichzeitig gibt es auch einen starken Trend zu speziellen Laufzeitumgebungen auf solchen Plattformen. So gibt es von .Net auch mobile Varianten, die dann auch das ausführen von C# auf so einem PDA ermöglichen (es werden entsprechende Bibliotheken zur Verfügung gestellt). Der Vorteil liegt einfach darin, dass man nur noch die Laufzeitumgebung an die HW anpasst und alle darauf aufsetzenden Programme direkt laufen (ohne diese Abstraktionsschicht müsste man alle Programme ggf. anpassen). Zu dem Beispiel möchte ich aber dann auch gleich drauf verweisen, dass Java hier (im Moment?) eher das Rennen macht, da hat Google jetzt eine Handy-Plattform veröffentlicht, die auf Java basiert und frei verfügbar ist (und vom Handy zum PDA ist nicht so der große Sprung).

Ach ja, zu allen Sprachen findest Du kostenlose Compiler und Bücher! Für C# empfiehlt sich der Einsatz von Microsofts VS C# Express bzw. für die Kommandozeile findest Du auch im .net SDK den CSC (C# Compiler). Bei C++ findest Du in der Gnu Compiler Collection (gcc) g++ (cygwin und msys wurden ja schon genannt, ansonsten ist die gcc Standard unter den Unixen, Linux und BSD), sowie natürlich auch Turbo C++ Explorer. Auch für C gibt es einen freien Compiler in der GCC (der heißt dann auch gleich gcc), ich glaube Borland stellt auch einen Kommandozeilen - Compiler zur Verfügung, kann dann auch gleich mit einem Plugin innerhalb der Eclipse Umgebung genutzt werden). Aufpassen musst Du bei der Verwendung eines C++ - Compiler für C. Die Syntax ist zwar kompatibel, aber C++-Bibliotheken sind anders aufgebaut als die in C! So kennt C++ die Überladung von Funktionen und C nicht. Entsprechend ist jeder FUnktionsname in C eindeutig, während C++ noch die Parameter mit berücksichtigt (führt eben zu einer abweichenden Benennung). Willst Du also eine mit C++ übersetzte Datei / Bibliothek durch einen C-Compiler binden lassen, hast Du ein Problem (gibt allerdings in C++ entsprechende sprachliche Mittel das Problem zu umgehen).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
xXcomputerrookieXx

Registriert seit: 16. Nov 2007
Ort: Bielefeld
61 Beiträge
 
Delphi 7 Personal
 
#14

Re: Welches C ?

  Alt 26. Jan 2008, 20:27
Zitat von Nuclear-Ping:
Ich kenn das Buch zwar nicht. Aber der Author ging wohl nicht davon aus, dass man hier mit einer Windows-IDE arbeitet.
Dass das Programm gleich wieder "dicht" war, lag somit nicht am Author des Buches. Deswegen würde ich es auch nicht als schlecht bezeichnen und dass Beispiele nicht funktionieren.
Das gleiche "Problem" (was ja an sich ein normales Verhalten der IDE darstellt) hat man ja mit Delphi auch, wenn man eine Konsolenanwendung macht. Die Ergänzungen deinerseits machen die Beispiele also nicht "richtig" (die Beispiele aus dem Buch sind auch nicht "falsch").

Afaik haben die IDEs in DOS früher immer standardmäßig nach Beenden des Programms auf eine Benutzereingabe gewartet. Daher wohl auch der Stil in dem Buch.
Meine Ergänzungen konnten die Programme aber funktionsfähig machen und wer die Einführungen zum Buch gelesen hat,der weiß das der Autor erwähnt hat,das die Beispiele unabhängig von IDE,OS etc. laufen werden.Man braucht nur einen C Compiler welchen ich auch habe.

Außerdem habe ich das Buch nicht als schlecht bezeichnet,ich fand die Sache mit den Beispiel Codes als Anfänger dann nur recht verwirrend und hab mir anderweitig Hilfe holen müssen.Ansonsten sagte ich sei Alles verständlich!
Gruß Rookie

Wer kämpft kann verlieren,wer nicht kämpft hat schon verloren!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Welches C ?

  Alt 26. Jan 2008, 20:33
Zitat von xXcomputerrookieXx:
Meine Ergänzungen konnten die Programme aber funktionsfähig machen und wer die Einführungen zum Buch gelesen hat,der weiß das der Autor erwähnt hat,das die Beispiele unabhängig von IDE,OS etc. laufen werden.
Die Programme sind auch ohne deine Änderungen funktionsfähig, wie oft denn noch. Die Programme laufen auch unabhängig von IDE, OS, etc. Starte doch die originalen Programme nach der Übersetzung von der Konsole aus, wofür sie schliesslich erstellt wurden und du siehst, dass sie komplett funktionsfähig sind.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#16

Re: Welches C ?

  Alt 26. Jan 2008, 20:34
Zitat von xXcomputerrookieXx:
Meine Ergänzungen konnten die Programme aber funktionsfähig machen und wer die Einführungen zum Buch gelesen hat,der weiß das der Autor erwähnt hat,das die Beispiele unabhängig von IDE,OS etc. laufen werden.Man braucht nur einen C Compiler welchen ich auch habe.

Außerdem habe ich das Buch nicht als schlecht bezeichnet,ich fand die Sache mit den Beispiel Codes als Anfänger dann nur recht verwirrend und hab mir anderweitig Hilfe holen müssen.Ansonsten sagte ich sei Alles verständlich!
Naja, darüber könnte man nun diskutieren.

Ich hab den Punkt nur aufgegriffen, weil ich den Effekt kenne und ihn am Anfang unter Windows mit Dev-C++ oder Delphi mit Konsolenanwendungen auch hatte. Aber nach 2-3x starten war mir klar, dass das nicht offen bleibt, weil's ja eben ne Konsolenanwendung ist, die sich beendet, wenn sie durch ist. Bei GUI-Anwendungen hast du ja die Message-Schleife die das verhindert.

Eben deswegen kann man es nicht auf den Author oder seine Beispiele schieben, da das ein Layer-8-Problem ist. Viel zu oft ordnet man sowas tieferen Layern zu.
  Mit Zitat antworten Zitat
xXcomputerrookieXx

Registriert seit: 16. Nov 2007
Ort: Bielefeld
61 Beiträge
 
Delphi 7 Personal
 
#17

Re: Welches C ?

  Alt 26. Jan 2008, 20:44
Ja ich konnte mir auch schwer vorstellen,dass ein solches Buch Fehler in dem Sinne enthält...
Ich habe mir dann schon gedacht,dass die Programme sofort zuende sind,wenn sie eben gestartet wurden,nur wusste ich auch nicht wie ich das verhindern kann,habe ja gerade mal angefangen C zu lernen.
Demnächst arbeite ich sowieso auf Linux weiter,wenn ich mit C arbeite.
Gruß Rookie

Wer kämpft kann verlieren,wer nicht kämpft hat schon verloren!
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#18

Re: Welches C ?

  Alt 27. Jan 2008, 10:55
also erstmal danke für eure vielen Antworten!
Dieses Dev-C++ habe ich mir downgeloaded... nicht schlecht nur find ich es dumm das es da keinen Formulareditor wie bei delphi gibt!

Außerdem hab ich endeckt, das bei meinem Delphi 2005 PE auch c# dabei ist...
Also ich hab jetzt den Eindruck, das es das beste ist, sich mal mit diesem C++ zu beschäftigen...
Wie gesagt wäre mir dabei aber so ein Formulareditor sehr recht! welche Entwicklungsumgebungen empfehlt ihr mir?

PS.: bin grad dabei TurboC++ runter zu laden...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Welches C ?

  Alt 27. Jan 2008, 11:15
Die Formulareditoren haben die wenigsten freien enthalten, eigentlich nur die großen Systeme. Also Borland und MS haben dies mit und deren kostenlose Packete (Turbo C++, Visual C++ Express Edition) wurden dir ja schon genannt.
  Mit Zitat antworten Zitat
xy124

Registriert seit: 3. Dez 2007
146 Beiträge
 
Delphi 7 Personal
 
#20

Re: Welches C ?

  Alt 27. Jan 2008, 12:31
Ja... hab mir grad mal Turbo delphi fertig gedownloaded aber wo bekomme ich jetzt dieses J# her?

(der Link von der Installation zu J# führt ins leere)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz