bjone Insert booze to continue | yep ça marche (t'as de la chance je t'ai fait un truc qui marche, passke je me suis jamais pris la tête à tester si j'avais des dépassements non désirés, vu qu'en général il sont désirés )
Code :
- #include <iostream>
- using namespace std;
- class Add_Overflow_Exception
- {
- public:
- long a,b;
- Add_Overflow_Exception( int ca, int cb) : a(ca), b(cb) {};
- };
- long secured_add( long a, long b )
- {
- long value;
- _asm {
- mov eax,a
- add eax,b
- mov value,eax
- jno NoOverflow
- }
- throw( Add_Overflow_Exception(a,b) );
- NoOverflow:
- return value;
- }
- int main()
- {
- try {
- // a marche
- cout<<secured_add(4,5)<<endl;
- cout<<secured_add(-1,-1)<<endl;
- cout<<secured_add( 0x7fffffff,0)<<endl; // 0x7fffffff: valeur max pour un entier 32bits signé
- cout<<secured_add( 0x80000000,0)<<endl; // 0x80000000: valeur min pour un entier 32bits signé
- // a kaput
- cout<<secured_add( 0x7fffffff,1)<<endl;
- cout<<secured_add( 0x80000000,-1)<<endl;
- }
- catch( Add_Overflow_Exception &e )
- {
- cout<<"Dépassement lors de l'addition de '"<<e.a<<"' et '"<<e.b<<"'\n";
- }
- }
|
donnera:
Citation :
9
-2
2147483647
-2147483648
Dépassement lors de l'addition de '2147483647' et '1'
|
Message édité par bjone le 23-04-2004 à 02:43:50
|