在日常的工作中,不可避免的要使用一些第三方库,有的时候第三方库提供了一些宏定义值,根据不同的宏定义值会有不同的响应。此时就出现一个冲突即主程序中的宏值与编译动态库时的宏值不同时,在程序运行过程中会以主程序中的值为准还是以动态库中的值为准?
直接先给结论:主程序代码以主程序中宏值为准,库中代码以库中宏值为准,相互之间不干扰,所以在使用第三方库时如果遇到宏定以值,主程序一定要手动将值与动态库中保持一致,否则程序就会有异常或者不能按预定计划执行,下面我们以jrtplib库的RTP_SUPPORT_THREAD值为例,一起验证一下。
测试库文件
//jrtplibso.h
void sendData();
//jrtplibso.cpp
#include <iostream>
void sendData()
{
#ifdef RTP_SUPPORT_THREAD
printf("define RTP_SUPPORT_THREAD\n");
#else
printf("un define RTP_SUPPORT_THREAD\n");
#endif
}
主程序文件
//jrtplib_test.cpp
#include <iostream>
#include "jrtplibso.h"
#define RTP_SUPPORT_THREAD 1
int main()
{
printf("RTP_SUPPORT_THREAD:%d\n", RTP_SUPPORT_THREAD);
sendData();
return 0;
}
编译过程与程序输出
上图中上部分编译未指定动态库中的宏定义值,库中代码输出“un define RTP_SUPPORT_THREAD”,主程序代码输出“RTP_SUPPORT_THREAD:1”
下部分编译指定动态库中的宏定以值为1,库中代码输出“define RTP_SUPPORT_THREAD”,主程序代码输出“RTP_SUPPORT_THREAD:1”
可得出如上结论