修改C语言回调函数typedef名称是否会导致ABI兼容问题?
回调类型重命名是否会导致ABI破坏?
版本定义对比
1.0版本的回调类型定义:
typedef void (*module_change_callback)(int state);
2.0版本计划修改后的回调类型定义:
typedef void (*module_changed_callback)(int state);
结论
不会造成ABI破坏。
在C语言中,typedef仅用于为已有类型创建别名,这里两个typedef对应的函数指针类型签名完全一致——返回值为void、参数为int,二进制层面的类型表示没有任何差异。只要库的导出符号中不包含该typedef的名称(比如没有直接导出以该类型名为标识的符号),仅仅重命名类型别名不会影响已编译客户端与新版本库的兼容性。
内容的提问来源于stack exchange,提问作者Lunch Basketball
相关产品推荐
相关产品推荐

