C - Sicherer Umgang
-
Hallo,
nochmal zurück zum Start.
Ich wollte fragen, ob ihr mir (nochmals falls schon geschehen) Quellen geben könntet, die
mir (bevorzugt aber nicht notwendigerweise - verständlich und auf deutsch -) das nötige Wissen zu
( vlt insbesondere Datentypen und da speziell zu Gleitkommatypen und ihre Verwendung gerne aber auch allgemein was wichtig ist )
C vermitteln und mir einen sicheren Umgang mit der Sprache ermöglichen?
(Sind Datentypen das einzige Thema in C worauf man (im Gegensatz zu anderen Sprachen mehr) aufpassen muss?)
(meine bisheren Fragen waren alle ohne die nötigen Grundlagen eher wenig hilfreich und praktisch ausgelegt was
einwenig der Hektik im Praktikum geschuldet ist das ich gerade mache, aber ich möchte in Zukunft sicherer mit C zurechtkommen)Vielen Dank,
James
-
Es gibt keine qualifizierten deutschen Quellen zur qualifizierten Vermittlung von C.
Es gibt manchmal deutsche Übersetzungen empfehlenswerter englischsprachiger Quellen:- The C Programming Language, 2nd Edition, by Kernighan and Ritchie
- Prata: C Primer Plus
- Secure Coding in C and C++, 2nd Edition By Robert C. Seacord
- SEI CERT C Coding Standard: Rules for Developing Safe, Reliable, and Secure Systems (2016 Edition)
Das liegt insbesondere daran, dass C aus der Praxis heraus entstanden ist und somit nicht als Lernsprache konzipiert ist - was diverse Buchautoren, Hochschulprofessoren und Tutorialschreiberlinge aber nicht davon abhält, ihr aufgeschnapptes Halbwissen als fachkundige Quelle zu propagieren.
-
@Wutz sagte in C - Sicherer Umgang:
Es gibt keine qualifizierten deutschen Quellen zur qualifizierten Vermittlung von C.
Es gibt manchmal deutsche Übersetzungen empfehlenswerter englischsprachiger Quellen:- The C Programming Language, 2nd Edition, by Kernighan and Ritchie
Das Buch von Kernighan und Ritchie ist leider schon sehr angestaubt und die 2. Auflage ist keineswegs zu 100% ANSI Standard, wie es der Aufmacher des Buches suggeriert. Das Buch war Anfang der 1990er ohne Alternative, mittlerweile ist es nur noch von historischen Wert. Ich habe es auch noch im Regal stehen und es schon sehr oft genutzt.
Dazu nur ein Beispiel aus Kapitel 1
#include <stdio.h> main() { printf("hello world\n"); }
Das willst Du Anfänger zumuten?
-
@JamesNguyen sagte in C - Sicherer Umgang:
(Sind Datentypen das einzige Thema in C worauf man (im Gegensatz zu anderen Sprachen mehr) aufpassen muss?)
Welche anderen Sprachen meinst du?
Pascal, Fortran sind auch stark typisiert,
Python, Tcl, Perl eher nicht.Man muss in C auf alles aufpassen.
Der C-Standard ist so formuliert, dass C auf vielfälltigster Hardware laufen kann und Programmcode wiederverwendbar ist - wenn man es richtig schreibt. Er lässt dabei auch Freiheiten.Das macht es nicht einfach, wenn man damit nicht umgehen kann.
-
@john-0
als ein gerade lernender Anfänger der zufällig mitliest.. Was ist an dem Code genau so schlimm :D?
-
@Kintaro777 sagte in C - Sicherer Umgang:
@john-0
als ein gerade lernender Anfänger der zufällig mitliest.. Was ist an dem Code genau so schlimm :D?Das implizite int als return Typ wurde mit C99 eigentlich abgeschafft. Die meisten Compiler erlauben es trotzdem noch (mit Warnungen), vermutlich damit der Code aus dem wichtigsten C Buch noch läuft. Schlechter Stil ist das trotzdem und total veraltet.
Falls du als Anfänger gar nicht wusstest, dass die hier definierte Funktionen einen int zurück gibt: Da siehst du, warum man solche versteckten Überraschungen nicht mehr gerne nutzt.
-
@Kintaro777 sagte in C - Sicherer Umgang:
@john-0
als ein gerade lernender Anfänger der zufällig mitliest.. Was ist an dem Code genau so schlimm :D?Neben dem Punkt den SeppJ schon ansprach, sollte das Programm auch korrekt beendet werden. D.h. man musste bei ANSI C1989/ISO C1990 auch bei
return
einen Wert zurückliefern. D.h. das Programm hätte ungefähr so aussehen sollen.#include <stdio.h> #include <stdlib.h> int main() { printf("hello world\n"); return EXIT_SUCCESS; }
Mit C99 muss man keinen Wert mehr zurückliefern, wenn er fehlt macht das die Laufzeitumgebung. Die C Norm legt nur zwei Werte fest
EXIT_SUCCESS
undEXIT_FAILURE
. POSIX definiert darüber hinaus eine ganze Latte an Werten für die verschiedenen Situationen für Shell Umgebungen, keine Ahnung was Windows macht.Nachtrag:
Alternativ darf man in C auch die Funktionexit
nutzen.