considerare questo programma:L'UB garantito può essere rifiutato al momento della compilazione?
#include <stdio.h>
int main(void)
{
int x;
while (1 == scanf("%d", &x))
printf("%c\n", "hello"[x]);
}
Il compilatore deve compilare questo successo perché il programma non ha UB fino a quando l'utente non immette alcun numero di fuori del campo 0
-4
.
Tuttavia, secondo lo this thread UB può viaggiare indietro nel tempo. Ora consideriamo questo programma:
int main(void)
{
printf("hello\n");
"hello"[6];
}
Ogni invocazione di questo programma si traduce in un comportamento indefinito, e dal momento che può viaggiare nel tempo, l'intero comportamento di questo programma su qualsiasi invocazione non è definito. Il compilatore può quindi rifiutare il programma e non generare un eseguibile? (Potremmo dire che l'UB viaggia indietro nel tempo fino alla fase di compilazione!)
@Zaffy: '" ciao "[5]' è ''\ 0'',' "ciao" [6] 'è fuori limite. – Jarod42
@ Jarod42 oh, sì, mi dispiace :) – Zaffy
Il rilevamento affidabile e sonoro di un comportamento indefinito è un problema irrintracciabile o indecidibile .... –