我有以下类型,用于说明:
struct outer {
struct inner {
const int c;
int x;
} i;
int y;
};
我想 malloc outer
,然后再初始化inner
以获得正确的 const 行为outer.i.c
。
例如,像
struct outer *o = malloc(sizeof *o);
o->y = find_y();
int cc = find_c();
int xx = find_x();
o->i = { .c = cc, .x = xx };
但这给了我一个关于 的错误assignment of read-only member 'i'
,因为它是一个赋值,而不是一个初始化。
有没有办法在编译器前面做这样的事情?让我们考虑像在编译器周围偷偷摸摸地抛弃 const*((int *) &o->i.c)
或使用 memcpy on之类的技巧。&o.i
我可以在需要的地方找到它们,但我正在寻找最不偷偷摸摸的方法来做到这一点。
我没有使用 C++(我使用的是 C99)。