Considerando que o tipo A
é definido assim:
typedef struct a { const int a; } A;
Eu sei que este código é válido:
A * foo = malloc(sizeof *foo); // Allocates uninitialized memory with no effective type
memcpy(foo, &(typeof(*foo)){ .a = 42, }, sizeof *foo); // Effectively initialize the value once
(veja https://stackoverflow.com/a/79012045/13242312 )
Mas ainda é válido com alloca
instead of malloc
se quisermos que o valor esteja na pilha em vez do heap?
Caso de uso: Quero um único caminho de retorno em minha função, então quero definir a variável de resultado no escopo da função
A A_new(void) {
A * a = alloca(sizeof *a);
if (/* something */) {
memcpy(a, &(typeof(*a)){.a = 1}, sizeof *a);
} else {
memcpy(a, &(typeof(*a)){.a = 2}, sizeof *a);
}
return *a;
}