説明のために、次のタイプがあります。
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'
しかし、これは初期化ではなく割り当てであるため、エラーが発生します。
コンパイラーに事前にこのようなことをする方法はありますか?*((int *) &o->i.c)
constをキャストしたり、memcpyを使用し&o.i
てコンパイラーをこっそりと回したりするようなトリックを考えてみましょう。私はそれらが必要なところにビットを得ることができます、しかし私はこれをするための最も卑劣な方法を探しています。
私はC++を使用していません(C99を使用しています)。