考虑到类型A
定义如下:
typedef struct a { const int a; } A;
我知道此代码是有效的:
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
(参见https://stackoverflow.com/a/79012045/13242312)
但是,如果我们希望值位于堆栈而不是堆中,alloca
那么使用 而不是是否仍然有效?malloc
用例:我希望函数中有一个返回路径,因此我想在函数范围内定义结果变量
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;
}