次のような 2 つの C 構造体があるとします。
struct buffer_t {
void *buffer;
int length;
};
struct type_t {
int a;
struct buffer_t buf;
double c;
} obj;
obj
そして、の 2 番目のフィールドをエクスポートbuf
して、たとえばextern struct buffer_t buffer
(またはその他のもの) を使用して別のファイルから参照できるようにしたいのですが、それを実現する方法はありますか? obj.buf
構造体へのポインタではなく、構造体をエクスポートする必要があります。
編集構造obj.buf
全体ではなく、
具体的にエクスポートする必要があります。obj
EDIT2
アセンブリコードを使用して、必要なものを説明した方がよいと思います。コンパイラは、obj
の宣言に対して次のアセンブリ コードを生成することになっています。
.data
.align 8
.obj:
.long 0 # obj.a
.zero 8 # obj.buf.buffer
.zero 4 # obj.buf.length
.quad 0 # double 2
.size obj, 32
しかし、次のようなものを強制的に生成したい:
.globl obj_buf
.data
.align 8
.obj:
.long 0 # obj.a
obj_buf:
.zero 8 # obj.buf.buffer
.zero 4 # obj.buf.length
.quad 0 # double 2
.size obj, 32
obj.buf
シンボルで識別されます。では、C コンパイラ (GCC または Clang) にobj.buf
シンボルを割り当てる方法はありますか?