如果我有两个这样的 C 结构:
struct buffer_t {
void *buffer;
int length;
};
struct type_t {
int a;
struct buffer_t buf;
double c;
} obj;
我想导出obj
的第二个字段buf
,以便a可以从另一个文件引用它,例如extern struct buffer_t buffer
(或其他),有什么方法可以实现这一点吗?我需要导出 obj.buf 结构,而不是指向它的指针。
编辑 我需要专门导出 obj.buf,而不是整个 obj 结构。
编辑2
我想我最好用汇编代码来解释我需要什么。编译器应该为 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
一个符号呢?
最佳答案
在 C 语言中你不能。但如果你真的需要让它工作......这至少可以与我的 gcc 一起工作
asm (".set obj_buf, obj+4\n\t.globl obj_buf\n");
+4 显然是结构中成员的偏移量,如果您需要动态地设置它(例如使用 offsetof)...您将打开另一扇 hell 之门,祝您好运。
关于c - 如何从 C 中导出结构体的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18162806/