C ++ Qual é o comportamento indefinido mais antigo pode se manifestar?
Estou ciente de que o comportamento indefinido pode potencialmente causar qualquer coisa, o que torna potencialmente insignificante qualquer programa que contenha o UB. Eu queria saber se existe alguma maneira de identificar o primeiro ponto em um programa que o comportamento indefinido poderia causar problemas. Aqui está um exemplo para ilustrar minha pergunta.
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
//...
}
Do meu entendimento, os possíveis tempos que o comportamento indefinido poderia ser evocado (não necessariamente manifestado) são:
QuandocauseUndefinedBehavior()
é compilado.Quandomain()
é compilado.No momento em que o programa é executado.No momentocauseUndefinedBehavior()
É executado.Ou é o ponto em que o comportamento indefinido é evocado completamente diferente para cada caso e cada implementação?
Além disso, se eu comentei a linha ondecauseUndefinedBehavior()
é chamado, isso eliminaria o UB, ou ainda estaria no programa já que o código contendo UB foi compilado?