c - 如何从 C 中导出结构体的字段

标签 c gcc struct export symbols

如果我有两个这样的 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/

相关文章:

bash - 如何通过管道传递 gcc 或 gfortran 警告和错误

C++ GCC/MinGW 路径 : ssp, ext, tr1;并行、分机、位、实验

c++ - 我们可以将匿名结构作为模板参数吗?

c++ - 如何在 C++ 中清除 unordered_map 的 unordered_map?

c - C 中返回字符串的函数。为什么返回 null?

objective-c - 如何在 Linux 中运行简单的 Objective-C

c++ - 为什么linux上一个动态链接的可执行文件在自己的内存空间里有libc的完整内存空间?

methods - 具有相同名称和数量但类型不同的 Golang 方法

c - 未命中 launch.json 断点中添加的命令行参数时的 visual studio 代码

c - 苹果 vDSP 示例的问题