iOS-C模塊間條件調(diào)用

Case:外部模塊有一個(gè)函數(shù)fb_test,當(dāng)有外部模塊時(shí)調(diào)用fb_test,沒(méi)有外部模塊時(shí)不調(diào)用

// 沒(méi)有模塊FB的時(shí)候,只extern聲明模塊FB的函數(shù)fb_test,不調(diào)用是可以的,調(diào)用的話會(huì)報(bào)錯(cuò)符號(hào)找不到
extern void fb_test(void);
// 宏定義只適用于模塊內(nèi),不能跨模塊
//#ifdef B_H
//    NSLog(@"包含");
//#else
//    NSLog(@"不包含");
//#endif
// __has_include是檢測(cè)工程中是否包含某個(gè)頭文件,注意:工程中存在的文件不一定被引用了。常用來(lái)防止頭文件循環(huán)導(dǎo)入
#if __has_include("FB/B.h")
    NSLog(@"包含");
    fb_test();
#else
    NSLog(@"不包含");
#endif
// 弱符號(hào):據(jù)網(wǎng)上介紹鏈接器發(fā)現(xiàn)同時(shí)存在弱符號(hào)和強(qiáng)符號(hào),優(yōu)先選擇強(qiáng)符號(hào),如果發(fā)現(xiàn)不存在強(qiáng)符號(hào),只存在弱符號(hào),則選擇弱符號(hào)。據(jù)自己測(cè)試:跨模塊場(chǎng)景下優(yōu)先選擇了本模塊,strong和weak設(shè)置無(wú)效
void __attribute__((weak)) fb_test(void) {
    printf("weak:%s\n",__func__);
}

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容