ExpertiDict

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

type punning

/taɪp ˈpʌ.nɪŋ/substantivo

Técnica de reinterpretar os bytes de um objeto como outro tipo, por exemplo ler um float como inteiro. Em C é válida via union ou memcpy, mas não via cast de ponteiro.

Onde usar

Aparece em manipulação de bits de float e em parsing binário. Em C, diferente de C++, ler outro membro de uma union é permitido pelo padrão.

Em código

union { float f; uint32_t u; } x;
x.f = 1.0f;
printf("%08x\n", (unsigned)x.u); // 3f800000

Exemplos

We use a union for type punning between float and uint32_t.

Usamos uma union para type punning entre float e uint32_t.

Type punning through a pointer cast is undefined behavior.

Type punning por cast de ponteiro é comportamento indefinido.

Cuidado

Fazer o punning com cast de ponteiro, que viola strict aliasing e pode ser otimizado de forma inesperada.

Veja também

Todos os termos de C