Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » c# integer überlauf?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.07.2005, 12:53 Uhr
~pinky
Gast


Hi,
erkennt C# keinen integer überlauf? Ich dachte eingentlich, dass das bei C# sicherer wie z.B. bei C sein soll.
Wenn ich jetzt aber z.B. eine Funktion zur Berechnung der Fakultät schreibe:

C++:
static int fak-iter(int x) {
    int result = 1;
    for (int i = x; i > 1; i--)
        result *= i;
    return result;
}



Dann rechnet er (wie bei C) fröhlich im Kreis rum.
Zumindest bekomme ich bei größeren Zahlen (z.B. 33) negative Ergebnisse und bei noch größeren Zahlen (z.B. 100) 0 als Ergebnis.
Gibts da keine Exception wenn die Integer Grenzen überschritten werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.07.2005, 13:00 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Wieso sollte es denn eine Exception geben? Wenn du das Limit des Integers ereicht negiert sich der Wert einfach (bei Integer-Bereich -128 bis 127 gibt dir 127+1 ja auch in C -128 aus)!?

Exceptions gab's da afaik weder in C noch in C++...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.07.2005, 13:57 Uhr
~pinky
Gast


ja, exceptions gab es da weder in C noch in C++. Ich würde es aber eigentlich für sinnvoll halten. Denn wie bei meinem Beispiel ist es ja sicher nicht sinnvoll, wenn sich der Wert einfach negiert. Ich finde es würde die Sicherheit von Programmen deutlich erhöhen, wenn man Exception werfen würde wenn eine Bereichsgrenze überschritten wird, da dies ja sicher nicht vom Programmierer gewollt wurde.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.07.2005, 14:49 Uhr
(un)wissender
Niveauwart


Schau dir mal das Attribut checked an...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.07.2005, 15:18 Uhr
~pinky
Gast


Danke (un)wissender, genau das was ich gesucht habe.
Ich stelle mir aber noch die Frage, warum unckecked der default Wert ist? Wäre es andersherum nicht sinnvoller? Ich denke in es gibt deutlich mehr Fälle wo ein überlauf nicht gewollt ist und zu kritischen Situationen führen kann als umgekehrt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.07.2005, 09:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von ~pinky:
Danke (un)wissender, genau das was ich gesucht habe.
Ich stelle mir aber noch die Frage, warum unckecked der default Wert ist? Wäre es andersherum nicht sinnvoller? Ich denke in es gibt deutlich mehr Fälle wo ein überlauf nicht gewollt ist und zu kritischen Situationen führen kann als umgekehrt.


tja das ist microsoft-logic, wir wollen mehr fehler damit wir die bugfixes dann in der nächsten version teuer verkaufen können und als feature anpreisen können ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.07.2005, 12:59 Uhr
ao

(Operator)



Zitat von ~pinky:
Danke (un)wissender, genau das was ich gesucht habe.
Ich stelle mir aber noch die Frage, warum unckecked der default Wert ist? Wäre es andersherum nicht sinnvoller? Ich denke in es gibt deutlich mehr Fälle wo ein überlauf nicht gewollt ist und zu kritischen Situationen führen kann als umgekehrt.


Für sicherheitskritische Anwendungen gibt es Kodierungsrichtlinien, die über simples Overflow-Checking weit hinausgehen. Die haben in vielen Fällen dazu geführt, dass der Quellcode in diesen Bereichen gar nicht mehr von Menschen geschrieben wird, weil die viel zu viele Fehler machen.

Stattdessen sind zertifizierte Code-Generatoren im Einsatz, die mit Ablaufbeschreibungen in irgendeiner Form gefüttert werden und C++-, Java-, ADA- oder anderen Quelltext ausspucken, der dann von ebenfalls zertifizierten Compilern verwurstet wird. Und auch an die Tools, mit denen die Abläufe erstellt werden und der generierte Code analysiert wird, werden hohe Anforderungen gestellt.

Zurück zu C#: Es gibt die Compiler-Option /checked, die projektweit umgeschaltet werden kann. Wenn /checked eingeschaltet wird, dann werden alle Operationen, die nicht ausdrücklich im Code als unchecked gekennzeichnet sind, mit Überlaufprüfung übersetzt. Kannst ja mal ausprobieren, was das für ne Laufzeitbremse ist, wenn jede noch so popelige Berechnung erst mal auf Overflow abgeklopft wird, auch wenn da in der Realität nie was Schlimmeres drinsteht als 17 + 4.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: