Diskussion:C-Programmierung: Grundlagen

Letzter Kommentar: vor 1 Jahr von HirnSpuk in Abschnitt Einführung von Begriffen

Die Escape-Sequenzen gehören imho zur Ein- und Ausgabe, ich verschieb sie dorthin. --Stefan Kögl 16:11, 2. Aug 2004 (UTC)

Weil es wieder mal ausgebessert wurde: Die Funktionen der Standard C-Bibliotheken sind _kein_ Bestandteil von C, sondern Bestandteil der Bibliotheken. --Stefan Kögl 09:47, 30. Aug 2004 (UTC)

Vollkommen richtig. Jetzt habe ich auch endlich, endlich, endlich die Stelle in Kernighan & Ritchie „Programmieren in C“ gefunden. Ich zitiert Seite 11:
Übrigends ist printf nicht Teil der Programmiersprache C; in C selbst ist Eingabe oder Ausgabe nicht definiert. Bei printf handelt es sich nur um eine nützliche Funktion aus der Bibliothek, die normalerweise für C-Programme zur Verfügung steht. -- Daniel B 18:50, 9. Sep 2004 (UTC)

Compiler mit eigenem Editor = IDE? Bearbeiten

> Einige Compiler verfügen über einen eigenen Editor, in dem Sie den Quellcode [...]
Meinst du damit IDEs oder gibt es Programme, die sich als Compiler bezeichnen und über einen integrierten Editor verfügen? --Stefan Kögl 20:37, 3. Sep 2004 (UTC)

Ist das so besser formuliert? -- Daniel B 07:04, 4. Sep 2004 (UTC)
Mit der Einleitung 'Vereinfacht gesagt, ...' und dem Ziel einem Anfänger schnellen Einstieg in die Sprache zu geben, würde ich es stehen lassen.
Jedoch gibt es neben dem Compiler auch andere Tools, wie Linker, Library-Archiver, Debugger, Profiler etc. bis hin zum Pretty-Printer und auch das wichtige Tool eines Editors oder des Hilfe-Browsers. Die Bezeichnung IDE (Integrated Developer Environment) bezeichnet eine Umgebung (Environment), die diese Tools unter einer Bedienoberfläche (GUI) so zusammenfasst (integriert), dass günstigstenfalls alle an der Entwicklung (Development) beteiligten Tools von ihr aus bedient werden können und Datenaustausch sowie Quelltext-Markierungen anhand von Rückgaben einzelner Tools direkt in der IDE geschehen kann. Man also keine Einzelaufruf der Tools zwingend durchführen muss... aber kann. Auch MS Visual C .Net kann aus dem MS Enterprise Architect per Command Line Interpreter bedient werden und dies ist bei automatisierten Skripten sinnvoll. Obwohl ja gerade die für Mausklicks und Fenster bekannt sind.
Natürlich trägt bei einigen Herstellern die Produktbezeichnung irreführend das 'Compiler' mit im Namen. Ein Compiler ist enthalten, aber auch eine Menge anderer Tools. Aber das liegt wohl daran, dass meist kein Debugger, Library-Archiver oder ein Hilfe-System einzeln verkauft wird und es sich eingebürgert hat, die Tools Compiler und Interpreter als besonders wichtig hervorzuheben.
So wie es jetzt dasteht, ist es noch nicht wirklich richtig. Aber muss die Zielgruppe, die C erlernen will es wirklich genau wissen? --Oliver Merkel 08:57, 4. Sep 2004 (UTC)
Vielleicht ist die folgende Formulierung besser:
Viele Compiler sind Bestandteil einer integrierte Entwicklungsumgebungen - oder kurz IDE ( aus dem Englischen Integrated Design Environment oder Integrated Development Environment) – die neben dem Compiler auch über einen integrierten Editor verfügen.
Aber für bessere Vorschläge bin ich immer offen.

Links am Anfang Bearbeiten

Wäre es nicht besser dort auf die Wikipedia zu verweisen, als innerhalb Wikibooks? Man würde ja nicht ein Buch erwarten sondern nur eine Definition:

... Für die Entwicklung des Betriebsystems UNIX entschied sich deshalb Ken Thompson zunächst dieses in FORTRAN zu programmieren ... lg --Just-Ben 19:17, 30. Okt 2004 (UTC)

C für Narren Bearbeiten

Du gehst gleich in Medias res. Ist aber falsch. Es gibt auch leute die nix wissen. Also: erklär kurz was ein Editor ist (seufz). Erklär wie man ihn aufruft. Erklär wie man abspeichert. Erklär wie man kompiliert. Dann erklär wie man Hello World schreibt.

Schreib auch: wer weiß was ein Editor ist, der liest bitte auf Seite / Abschnitt xyz weiter. 172.176.152.140

Im vorherigen Kapitel steht: "Allerdings sollten Sie den Umgang mit ihrem Betriebssystem sicher beherrschen,...". Dazu gehört auch der Umgang mit einem Editor. IMO ist es keine Aufgabe einer Einführung in eine Programmiersprache zu erklären wie ein Editor funktioniert. Dies währe auch eine fast unlösbare Aufgabe bei der Verbreitung von C und damit verbunden Anzahl von Editoren.
Zur Übersetzung mit dem Compiler: Hier wird im Abschnitt "Compiler" auf die Referenz verwiesen (noch vor dem "Hello World" Programm!). Das Kapitel soll in Zukunft dazu dienen zumindest für die wichtigsten Compiler eine Kurzanleitung zu bieten. Und wen sonst noch was fehlt: Jeder ist aufgerufen das Buch zu verbessern oder zu ergänzen. -- Daniel B 21:03, 15. Jun 2005 (UTC)


Moin Moin, ich habe absolut keine Ahnung von C (kenne und kann aber fortran, idl und python). Da ich unter Linux arbeite ist mir klar, das eine spezielle Dateiendung nicht zwigend ist. Ich faende es aber hilfreich kurz zu sagen, was die standard Dateiendung von c source code ist. Bezueglich der Nutzung des compilers denke ich reicht die Referenz. Ich habe im ersten Versuch die Syntax zum kompilieren von meinem hello_word.c (?) erraten. Uebertrieben faende ich es aber aucht nicht. --149.217.40.222 17:19, 17. Apr. 2012 (CEST)Beantworten

Komentare im Quelltext Bearbeiten

Wie problematisch ist eigentlich der einsatz von // ? Beispiel: Ich schreib unter nem Unix derivat ein Programm. Dann nehme ich den Quelltext begebe mich damit in eine (MS-)DOS/Windows umgebung und will das File Compilieren.

Unixes benutz glaub ich nur LF um das ende einer Zeile zu markieren.
MS-Systeme verwenden CR und LF um das ende einer Zeile anzuzeigen.

Die unter Linux erstellte Quelldatei hat also nur LFs im ASCII-Code gespeichert. Somit würde ein Windows/DOS Programm das Zeilenende nicht richtig erkennen. Verwende ich nun // irgendwo im Text müsste der Präcompiler eigentlich alles danach bis zum Fileende als Kommentar ausklammern. Oder irre ich mir mit dieser These?

Wenn es stimmt sollte von der Verwendung von // abgeraten werden. -- LeiD -- 7. Nov. 2005

Der C Standard kennt keinen ASCII Code. C ist nicht auf einen speziellen Zeichensatz ausgelegt. Deshalb ist das Problem nicht ein C Problem, sondern vielmehr des Betriebssystems und des Compilers. -- Daniel B 18:59, 7. Nov 2005 (UTC)

Weitere Kommentare zu diesem Abschnitt des Buches Bearbeiten

Dank des Bibliothekskonzeptes ist es auch möglich, die eigenen Programme über viele Dateien verteilt (also thematisch "sortiert") zu implementieren, denn im Prinzip ist es dem Compiler egal, woher er den Quellcode bekommt, er muss nur zum richtigen Zeitpunkt zur Verfügung stehen. - Hmm... Soweit ich weiß, erstellt der Linker die Bibliotheken aus den kompilierten Objektdateien. Inwiefern hat also der Quellcode in den einzelnen .c-Dateien etwas mit dem Bibliothekskonzept zu tun?

Es wurde für die Sprache C sogar der Begriff des Hochsprachen-Assemblers in Umlauf gebracht, denn vieles, was man früher in Assembler programmieren musste, ist durchaus in C programmierbar. - Die Begründung, daß C auch als Hochsprachen-Assembler gesehen wird, ist meines Erachtens, daß C, im Gegensatz zu anderen (Hoch-)Sprachen, sehr maschinennah ist.

Historisch gesehen kommt zwischen Compiler und Linker noch der Assembler. - Historisch? Verwendet der GCC denn nicht einen Assembler?

Der Präprozessor funktioniert im Grunde wie die "Suchen und Ersetzen"-Funktion eines Textverarbeitungsprogramms. Er bearbeitet lediglich den Quelltext - Könnte man mißverstehen: Er bearbeitet (d.i. verändert) meine Quelltextdateien.

Oftmals stößt er allerdings auch das eigentliche Übersetzen und Linken (auch als "Binden" bezeichnet) an. - Der Präprozessor stößt das Linken an? Versteh ich nicht... Was heißt das?

Wenn Sie ein Textverarbeitungsprogramm anstelle eines Editors verwenden, müssen Sie allerdings darauf achten, dass Sie den Quellcode im Textformat ohne Steuerzeichen abspeichern - Jetzt könnte man fragen: Welches Textformat? utf8 latin1 usw.

Über die Anweisung return wird ein Wert an die übergeordnete Funktion weitergegeben. - Was ist eine "übergeordnete Funktion"? Das versteht kein Laie. Besser wäre es einfach zu sagen, daß eine Funktion einen Wert zurückgibt...

--Thomas-Chris 16:54, 30. Jul 2005 (UTC)

Dank des Bibliothekskonzeptes ist es auch möglich, die eigenen Programme über viele Dateien verteilt (also thematisch "sortiert") zu implementieren, denn im Prinzip ist es dem Compiler egal, woher er den Quellcode bekommt, er muss nur zum richtigen Zeitpunkt zur Verfügung stehen. Was der Absatz aussagen solle ist mir nicht ganz klar (stammt auch nicht von mir).
Es wurde für die Sprache C sogar der Begriff des Hochsprachen-Assemblers in Umlauf gebracht, denn vieles, was man früher in Assembler programmieren musste, ist durchaus in C programmierbar. Soweit ich weiß, wurden früher beispielsweise Betriebssysteme in Assembler programmiert wohingegen sie heute in C programmiert werden. Insofern dürfte die Aussage schon richtig sein, aber ich kann mich auch täuschen.
Historisch gesehen kommt zwischen Compiler und Linker noch der Assembler. Hab das mal entsprechend abgeändert
Der Präprozessor funktioniert im Grunde wie die "Suchen und Ersetzen"-Funktion eines Textverarbeitungsprogramms. Er bearbeitet lediglich den Quelltext. Könnte man natürlich missverstehen. Verbesserungsvorschläge?
Oftmals stößt er allerdings auch das eigentliche Übersetzen und Linken (auch als "Binden" bezeichnet) an. Verstehe ich auch nicht. Hab den Satz entfernt.
Wenn Sie ein Textverarbeitungsprogramm anstelle eines Editors verwenden, müssen Sie allerdings darauf achten, dass Sie den Quellcode im Textformat ohne Steuerzeichen abspeichern. Damit sollte eigentlich deutlich werden, dass beispielsweise in Word die Datei nicht als Word-Dokument abgespeichert werden soll. Fällt mir jetzt gerade keine besser Formulierung ein.
Über die Anweisung return wird ein Wert an die übergeordnete Funktion weitergegeben. Hab ich entsprechend geändert. -- Daniel B 08:01, 31. Jul 2005 (UTC)
Habe zu diesen Themen ein paar Änderungen durchgeführt. --Thomas-Chris 21:49, 31. Jul 2005 (UTC)

Prototyp von main() in Codebeispielen Bearbeiten

In allen Beispielprogrammen wird die main-Funktion definiert als

int main() { /*...*/  }. 

Das entspräche einer Funktion mit einer unbestimmten Anzahl von Paramertern (mithin kein Prototyp!). So etwas war früher (K&R-C) einmal gang und gäbe, als auch noch implicit int etc. gab. Aber laut ISO/IEC9899-1999 Abschnitt 5.1.2.2.1 sind nur die Varianten

int main(void) { /*...*/  } 

bzw.

int main(int argc, char *argv[]) { /*...*/  } (oder äquivalent, z.B. int main(int n, char **v) { /*...*/  }) 

zulässig; alles andere wäre implementation defined und ergo nicht portabel (in freestanding implementations wiederum nichts ungewöhnliches, aber darauf hebt dieses Werk an dieser Stelle sicher nicht ab ;-). --IrrwahnGrausewitz 22:47, 9. Sep. 2010 (CEST)Beantworten

Einführung von Begriffen Bearbeiten

  • Wäre es möglich, fachsprachliche Begriffe bei ihrer ersten Verwendung im Buch zumindest mit einem Nebensatz zu erläutern? Beispiel: Kapitel 1.1 Historisches, „Die Sprache C unterschied sich von ihrer Vorgängersprache hauptsächlich darin, dass sie typisiert war.” Was genau ist der Unterschied, was bedeutet diese Aussage konkret? Es gibt zwar ein umfangreiches Wikipedia-Lemma zur Typisierung in der Informatik, aber aus diesem zu ermitteln, was in diesem Satz genau damit gemeint ist, stellt einen Informatik-Laien vor eine fast unlösbare Aufgabe, denn um es zu verstehen muß er bereits über umfassende Kenntnisse der Materie verfügen. Und das gleich im ersten Kapitel... Vielen Dank für jede Aufklärung und eine (gern auch kurze) Ergänzung des Textes. Alternativ würde auch eine Fußnote mit erklärendem Text das Problem lösen. --92.73.159.41 21:01, 25. Aug. 2022 (CEST)Beantworten
  • Gleiches Problem in Abschnitt 1.5. Die Erklärung der Programmfunktion ist nur für Leute mit Vorkenntnissen verständlich. Warum z.B. erscheint der zu berechnende Ausdruck doppelt in der Zeile? Völlig zusammenhanglos wird dann %i als Formatierungsanweisung vorgestellt. Wo kommt denn die Zahl her, die hier formatiert wird? Darunter kann sich nun wirklich niemand etwas vorstellen, der nicht schon eine objektorientierte Programmiersprache beherrscht. Ganz konkret: Hier müßte erläutert werden, was genau in der Zeile passiert, und welche konkrete Aufgabe ihre Bestandteile haben. Erst dann wird verständlich, warum die einfache Rechenaufgabe hier zwei Mal in der Zeile erscheint, einmal als Text, und einmal als Ausdruck der berechnet wird und dessen Ergebnis an der Stelle eingefügt wird, wo %i steht. Der Verweis auf einen später erläuterten Modulo-Operator trägt hier nichts zum Verständnis bei, sondern sorgt für zusätzliche Verwirrung. Und schließlich: Was ein Operator und ein Operand ist, wissen viele Menschen aus dem Mathematikunterricht. Aber der Begriff des Symbols, wie er in der Informatik verwendet wird, und der hier diese beiden weithin bekannten Begriffe erklären soll, wird nicht eingeführt, sondern einfach vorausgesetzt. Bitte diese Erklärung des Programmbeispiels dringend allgemeinverständlich überarbeiten. --92.73.159.41 21:41, 25. Aug. 2022 (CEST)Beantworten
  • Nächster Punkt: Kapitel 2.1 Hier wird ein völlig verkehrtes Verständnis mathematischer Variablen als Gegensatz zu Variablen in der Informatik postuliert. Auch in der Mathematik sind Variablen stets VARIABEL, und keineswegs konstant, sonst wären es Konstanten wie z.B. π oder e, um nur die bekanntesten zu nennen.--92.73.159.41 22:14, 25. Aug. 2022 (CEST)Beantworten
  • Nochmals Abschnitt 2.1, letzter Satz, Behandlung von Fehlern. Für Informatiker ist hier völlig klar, was gemeint ist. Der Laie wird sich aber etwas ganz anderes bei dieser Formulierung vorstellen: „Natürlich schreibe ich keine Fehler in meinen Code hinein, das ist doch klar, und wenn es doch passiert, korrigiere (behandele) ich sie.” Das ist es, was Nichtinformatiker hier lesen, und was das Behandeln von Fehlern in einem Programm bedeutet, bleibt unklar. Der Begriff wird einfach unreflektiert verwendet, ohne ihn einzuführen. --92.73.159.41 22:33, 25. Aug. 2022 (CEST)Beantworten
Vielen herzlichen Dank für die umfangreichen Rückmeldungen. Mir ist leider nicht bekannt, ob es Menschen gibt, die sich des Problems aktuell aktiv annehmen könnten. Wikibooks ist nicht gerade mit *Autoren gesegnet. Ich möchte mich aber sehr herzlich für die Mühe bedanken diese ganzen Kommentare zu geben. Das erleichtert eine weitere Arbeit sehr. Viele Grüße, HirnSpukDisk14:11, 26. Aug. 2022 (CEST)Beantworten
Zurück zur Seite „C-Programmierung: Grundlagen“.