Witam,
przyznam się, że nie wiem jak działa wrapv, ale co trapv wydaje mi się, że wszystko jest ok:

On Thu, 23 Mar 2006, Efrum wrote:
[...]
[EMAIL PROTECTED]:~/mpi$ cat test.cpp
#include <iostream>

int main() {

int i = 2147483648;
i++;
printf("%d\n", i);
return i;

}
[EMAIL PROTECTED]:~/mpi$ g++ -ftrapv test.cpp
[EMAIL PROTECTED]:~/mpi$ ./a.out
-2147483647

Jeżeli dobrze rozumiem mana te opcje powinny zapobiegać obu przypadkom. O co
chodzi?


Przekraczasz zakres w swoim kodzie podczas inicjalizacji:
i=2147483648 to tak naprawdę i=-2147483648 (zakres int to przecież -2147483648 do 2147483647).

i++ zmienia wartość z -2147483648 na -2147483647, czyli jest ok, zakres nie zostaje przekroczony.

Jeśli zainicjalizujesz i wartością 2147483647 to będziesz mógł zaobserwować, że przy dodaniu opcji -ftrapv przekroczenie zakresu zostanie zaraportowane, a bez tej opcji już nie:

[EMAIL PROTECTED]:~/tests$ cat t2.cpp
#include <iostream>

int main() {

 int i = 2147483647;
 printf("%d\n", i);
 i++;
 printf("%d\n", i);
 return i;

}
[EMAIL PROTECTED]:~/tests$ g++-3.4 t2.cpp
[EMAIL PROTECTED]:~/tests$ ./a.out
2147483647
-2147483648
[EMAIL PROTECTED]:~/tests$ g++-3.4 -ftrapv t2.cpp
[EMAIL PROTECTED]:~/tests$ ./a.out
2147483647
Przerwane


Pozdrawiam,
Marek
--
                "Ze wzoru na moje życie wyliczę sobie w niebycie nowy los"
                                                          (Raz, Dwa, Trzy)

Odpowiedź listem elektroniczym