Ein praktischer Tip fuer Zaehlervariablen

19/05/2013 - 20:13 von Rainer Weikusat | Report spam
Dem 'Programmiersuperhelden' gewidmet, der im Linux-kernelcommit
b0a873ebbf87bf38bf70b5e39a7cadc96099fa13 zwei spassige Moeglichkeiten
eingebaut hat, wie unprivilegierter 'userspace'-Code
Kernel-Speicherinhalte modifizieren kann, die er nicht modifizieren
koennen sollte, allerdings verschaemt darauf verzichtet hat, den von
ihm eigentlich gemachten Fehler zuzugeben:

Eine Variable, die eine 'Anzahl' real existierender Dinge
irgendwelcher Art enthalten soll, sollte nur dann einen
vorzeichenbehafteten Typ haben, falls negative Werte erwartet und in
einer sinnvollen Art und Weise behandelt werden. Dann klappt das
naemlich auch mit der Bereichsueberpruefung.
 

Lesen sie die antworten

#1 Stefan Reuther
20/05/2013 - 15:14 | Warnen spam
Rainer Weikusat wrote:
Eine Variable, die eine 'Anzahl' real existierender Dinge
irgendwelcher Art enthalten soll, sollte nur dann einen
vorzeichenbehafteten Typ haben, falls negative Werte erwartet und in
einer sinnvollen Art und Weise behandelt werden. Dann klappt das
naemlich auch mit der Bereichsueberpruefung.



Ach, weißt du, C macht einem das echt nicht einfach. Aus...

int average(int array[], size_t n) {
int sum = 0;
for (size_t i = 0; i < n; ++i) {
sum += array[i];
}
return sum / n;
}

...kann man genausogut herleiten, dass eine Variable, die eine 'Anzahl'
real existierender Dinge irgendwelcher Art enthalten soll, nur dann
einen vorzeichenlosen Typ haben sollte, wenn diese Anzahl wirklich
absolut 100% ausschließlich nur fürs Zàhlen verwendet wird. Sonst ist
der Durchschnitt aus 0 und -1000 auf einmal 2147483148.


Stefan

Ähnliche fragen