You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clang下带结构体继承的offsetof使用问题求助

解决Clang编译Plan9扩展代码的问题

你的代码依赖GCC的Plan9扩展实现匿名结构体成员嵌入,Clang默认不启用该扩展,以下两种方案可让代码在Clang下正常编译:

方案一:启用Clang的Plan9扩展

编译时添加-fplan9-extensions参数,和GCC的用法一致,原代码无需修改:

clang -fplan9-extensions your_source_file.c

方案二:修改代码为标准C兼容写法

如果不想依赖编译器扩展,可调整代码为符合C标准的形式:

方式1:使用C11匿名结构体(需启用C11标准)

将struct B中的A;替换为struct A;,编译时指定-std=c11:

typedef struct A {
    int value;
} A;

typedef struct B {
    struct A; // 标准C11匿名结构体成员
} B;

int main (void) {
    offsetof(B, A);
    return 0;
}

编译命令:

clang -std=c11 your_source_file.c

方式2:显式命名结构体成员

给嵌入的A类型成员添加名字,完全兼容所有C标准版本:

typedef struct A {
    int value;
} A;

typedef struct B {
    A a; // 显式命名成员
} B;

int main (void) {
    offsetof(B, a); // 使用成员名计算偏移
    return 0;
}

编译无需额外参数:

clang your_source_file.c

内容的提问来源于stack exchange,提问作者Gioviiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:05:01