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?

questionAnswers(5)

yourAnswerToTheQuestion