C ++ Какое самое раннее неопределенное поведение может проявиться?
Я осознаю, что неопределенное поведение может потенциально вызвать что угодно, что делает любую программу, содержащую UB, потенциально бессмысленной. Мне было интересно, если есть какой-либо способ определить самую раннюю точку в программе, что неопределенное поведение может вызвать проблемы. Вот пример, иллюстрирующий мой вопрос.
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
//...
}
Насколько я понимаю, возможное время, когда неопределенное поведение может быть вызвано (необязательно проявлено):
когдаcauseUndefinedBehavior()
компилируется.когдаmain()
компилируется.В момент запуска программы.В это времяcauseUndefinedBehavior()
выполнен.Или точка, в которой вызывается неопределенное поведение, совершенно различна для каждого случая и каждой реализации?
Кроме того, если я закомментировал строку, гдеcauseUndefinedBehavior()
называется ли это устранением UB или все еще будет в программе, так как код, содержащий UB, был скомпилирован?