C · Avançado · Inglês · Técnico
as-if rule
Regra que permite ao compilador transformar o programa como quiser, desde que o comportamento observável (E/S, voláteis, saída) seja o mesmo. Por isso laços e variáveis podem sumir.
Onde usar
Explica por que o assembly não bate com o fonte em -O2 e por que um benchmark com resultado não usado dá tempo zero: o compilador apagou o trabalho.
Em código
#include <stdio.h>
int main(void) {
int s = 0;
for (int i = 0; i < 1000; i++)
s += i; // -O2: vira 499500
printf("%d\n", s);
}Exemplos
By the as-if rule, the compiler deleted the whole loop.
Pela as-if rule, o compilador apagou o laço inteiro.
The benchmark is useless because the result is never used.
O benchmark é inútil porque o resultado nunca é usado.
Cuidado
Esperar que cada linha do código gere instruções; só o comportamento observável é preservado, e comportamento indefinido libera o compilador a quebrar suposições.
Sinônimos
regra do como se