ExpertiDict

C · Avançado · Inglês · Técnico

as-if rule

/æz ɪf ɹuːl/substantivo

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

Veja também

Todos os termos de C