Der Martin: Wie sicher ist die Keydatei? (LUKS)

Beitrag lesen

Hallo,

Hab jetzt ne Seite gefunden "C für Anfänger"

C ist im Grunde genommen sehr einfach, bietet aber viel Flexibilität und teilweise überraschende Möglichkeiten. Genau da liegt vielleicht auch der Knackpunkt: Diese Flexibilität und Vielseitigkeit lässt viel Raum für mögliche Fehler.

jetzt weiß ich wenigsten was das void so macht

Eigentlich gar nichts, außer den Compiler zu beschwichtigen. ;-)

und was die komischen Funktionen sind.

Welche komischen Funktionen?

Die Geschichte mit dem void ist gar keine Funktion, sondern eine 'Procedere' :-) (wie bei VB) ohne Rückgabe.

Formal betrachtet macht C keinen Unterschied zwischen Funktionen und Prozeduren (im Gegensatz z.B. zu Pascal). Jedes Unterprogramm ist eine Funktion. Falls eine Funktion "ausnahmsweise" mal so angelegt sein soll, dass sie keinen Wert zurückliefert, kennzeichnet man den Ergebnistyp der Funktion einfach als void, also "nichts". Das Schlüsselwort void kann auch in der Klammer einer Funktions-Deklaration stehen, die keine Parameter entgegennimmt; im Gegensatz zum Ergebnistyp ist es hier aber optional, die Klammer kann auch einfach leer sein.

Und schließlich kann void auch bei einem Zeigertyp verwendet werden, so ist ein void* zwar kein "Zeiger auf nichts", aber ein Zeiger auf "nichts Bestimmtes".

und die Funktionen sind Prototypen.

Nein. Ein Prototyp ist eine Art Vorab-Deklaration, mit der zunächst nur der Funktionskopf, also die Schnittstelle, bekanntgemacht wird. Der Funktionsrumpf bleibt vorerst weg, die Deklaration wird einfach mit einem Semikolon abgeschlossen, ohne dass eine geschweifte Klammer und der Anweisungsblock der Funktion folgt. Das da wäre ein typischer Prototyp:

int strlen(char *);

Das sagt dem Compiler vorab: Es gibt irgendwo eine Funktion mit dem Namen strlen, die einen Parameter vom Typ char* entgegennimmt und ein Ergebnis vom Typ int liefert.

Sinnvoll ist das vor allem, wenn man Funktionen in einem separaten Modul hat, deren Aufrufschnittstelle aber dem übergeordneten Programmcode bekanntmachen will.

Blöd dass man Zeichen nicht einfach mit + oder . zusammensetzen kann. Ständig zu kucken, wo welcher Speicherbereich anfängt ist ja genauso schlimm wie mit Assembler :-| Also mit der Zeigerrumschieberei, gerade bei Arrays (mag ja sehr schnell sein) ist ziemlich umständlich.

Ja, Stringverarbeitung in C ist gewöhnungsbedürftig und fehleranfällig. AFAIK ist C++ mit der String-Klasse da wesentlich einfacher zu handhaben ...

Gibt's eigentlich so was wie php.net für C?

Du meinst so'ne richtig ausführliche Online-Referenz? Bestimmt. Ist mir aber leider keine bekannt.

Ciao,  Martin

--
Vater Staat bringt uns noch alle unter Mutter Erde. Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(