iOS-C模块间条件调用

Case:外部模块有一个函数fb_test,当有外部模块时调用fb_test,没有外部模块时不调用

// 没有模块FB的时候,只extern声明模块FB的函数fb_test,不调用是可以的,调用的话会报错符号找不到
extern void fb_test(void);
// 宏定义只适用于模块内,不能跨模块
//#ifdef B_H
//    NSLog(@"包含");
//#else
//    NSLog(@"不包含");
//#endif
// __has_include是检测工程中是否包含某个头文件,注意:工程中存在的文件不一定被引用了。常用来防止头文件循环导入
#if __has_include("FB/B.h")
    NSLog(@"包含");
    fb_test();
#else
    NSLog(@"不包含");
#endif
// 弱符号:据网上介绍链接器发现同时存在弱符号和强符号,优先选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。据自己测试:跨模块场景下优先选择了本模块,strong和weak设置无效
void __attribute__((weak)) fb_test(void) {
    printf("weak:%s\n",__func__);
}

综上所述:extern+__has_include即可。注意增删framework要clean才能build生效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容