C ++ Jakie jest najwcześniejsze niezdefiniowane zachowanie, które może się manifestować?
Jestem świadomy, że niezdefiniowane zachowanie może potencjalnie powodować cokolwiek, co sprawia, że każdy program zawierający UB jest potencjalnie bez znaczenia. Zastanawiałem się, czy istnieje jakikolwiek sposób na zidentyfikowanie najwcześniejszego punktu w programie, w którym niezdefiniowane zachowanie może powodować problemy. Oto przykład ilustrujący moje pytanie.
void causeUndefinedBehavior()
{
//any code that causes undefined behavior
//every time it is run
char* a = nullptr;
*a;
}
int main()
{
//code before call
//...
causeUndefinedBehavior();
//code after call
//...
}
Z mojego zrozumienia wynika, że możliwe czasy, które mogą zostać wywołane przez niezdefiniowane zachowania (niekoniecznie przejawiające się) to:
GdycauseUndefinedBehavior()
jest skompilowany.Gdymain()
jest skompilowany.W momencie uruchomienia programu.WtedycauseUndefinedBehavior()
jest wykonywany.Czy też punkt, w którym niezdefiniowane zachowanie jest wywoływane zupełnie inaczej dla każdego przypadku i każdej implementacji?
Ponadto, jeśli skomentowałem linię gdziecauseUndefinedBehavior()
jest nazywane, czy wyeliminowałoby to UB, czy też nadal byłoby w programie od czasu skompilowania kodu zawierającego UB?