Defensives Programmieren Flashcards

Konstanten und Assertions

1
Q

Welche zwei Arten von Fehlern können in einem Programm auftreten und wie unterscheiden sie sich voneinander?

A

(1) Fehler, die der Compiler findet: syntaktische und manche semantische Fehler.
(2) Fehler, die der Compiler nicht findet: Laufzeitfehler (immer semantisch).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was sind Konstanten und wozu sind sie nützlich?

A

Konstanten 𝚌𝚘𝚗𝚜𝚝 versprechen, dass der Wert einer Variable während der Laufzeit des Programms nicht mehr geändert wird. Geschieht dies jedoch trotzdem, kommt es zu einem Compilerfehler, wie z.B. in folgendem Codeausschnitt:
𝚌𝚘𝚗𝚜𝚝 𝚒𝚗𝚝 𝚜𝚙𝚎𝚎𝚍_𝚘𝚏_𝚕𝚒𝚐𝚑𝚝 = 𝟸𝟿𝟿𝟽𝟿𝟸𝟺𝟻𝟾;

𝚜𝚙𝚎𝚎𝚍_𝚘𝚏_𝚕𝚒𝚐𝚑𝚝 = 𝟹00000000;
So helfen Konstanten, späteren Fehlerquellen vorzubeugen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Nach welcher Richtlinie sollte man beim Schreiben eines Programms Konstanten verwenden?

A

Man denke bei jeder (!) Variablen darüber nach, ob sie im Verlauf des Programmes jemals ihren Wert ändern wird oder nicht. Im letzteren Falle verwende man 𝚌𝚘𝚗𝚜𝚝, um die Variable zu einer Konstanten zu machen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Nach welchen drei Richtlinien kann man Fehlerquellen vermeiden?

A

(1) Genaue Kenntnis des gewünschten Programmverhaltens.
(2) An vielen kritischen Stellen überprüfen, ob das Programm auf dem richtigen Weg ist.
(3) Auch das scheinbar Offensichtliche hinterfragen (es könnte sich auch ein Tippfehler eingeschlichen haben).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was sind Assertions und wozu sind sie nützlich?

A

Assertions sind von der Form 𝚊𝚜𝚜𝚎𝚛𝚝(𝚎𝚡𝚙𝚛) und halten das Programm an, falls der boolesche Ausdruck 𝚎𝚡𝚙𝚛 nicht wahr ist. Man kann somit Laufzeitfehlern vorbeugen, wie in folgendem Beispiel:
𝚜𝚝𝚍::𝚌𝚒𝚗&raquo_space; 𝚊;
𝚊𝚜𝚜𝚎𝚛𝚝 (𝚊 != 0);
𝚋 = 𝟷0 / 𝚊;
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚋;
Hier wird versichert, dass nicht durch Null dividiert wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welchen initialen Schritt muss man machen, um Assertions überhaupt erst verwenden zu können?

A
Die "cassert"-Bibliothek integrieren, d.h.:
#𝚒𝚗𝚌𝚕𝚞𝚍𝚎
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Mit welchem Befehl kann man Assertions abschalten?

A
#𝚍𝚎𝚏𝚒𝚗𝚎 𝙽𝙳𝙴𝙱𝚄𝙶
(kommt im Code vor der Integration der "cassert"-Bibliothek).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly