Zachowania niezdefiniowane w C++

Opublikowane: 02/12/2014

w kategorii Zasoby.

Zachowania niezdefiniowane (ang. UB = Undefined Behaviour) to sytuacje gdzie standard nie określa jak program ma się wykonać, dlatego zachowanie programu zależy od wybranej implementacji kompilatora. Jest wiele sytuacji które mogą być określone jako "niezdefiniowane".

Przykładem takiej sytuacji (ze strony Bjarne Stroustrup's C++ Style and Technique FAQ)

// wartość a jest niezdefiniowana
int a = i++ + i++;

// jest niezdefiniowane jakie wartości zostaną przekazane do foo()
foo(v[i],i++);

Zasoby

Narzędzia

Strict aliasing (pol. ścisłe aliasowanie?)

W C/C++ na wyższych poziomach optymalizacji kompilator stosuje regułę "ścisłego aliasowania" która mówi, że konwersja wskaźnika jednego typu na inny może prowadzić do zachowania niezdefiniowanego i dlatego jest zabroniona. Ta reguła jest powiązana z optymalizacjami, które nie mogą być zastosowane jeśli kompilator nie może być pewny, że dwa wskaźniki nie odwołują się do tego samego adresu pamięci.

Zasoby:

Udostępnij

obserwuj