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
相关产品推荐
相关产品推荐

