由于Windows和Linux两平台对于int64_t的定义不一致,所以会导致告警。如果无视这些就警告的话实际上使用lld或者llu,就可以正确输出信息。(gcc报错需要添加-Wall -Wno-format-overflow)
本着不能有警告的原则,需要寻找出完美的解决方案。
首先出现问题的原因:系统对于int64_t的认定不一致
Windows下推荐使用的是:%lld、%I64d、%Id
Linux下推荐使用的是%ld
参考处理方案如下:
方法一:我们可以采用最基础的做法,做平台区分,例如:
#ifdef _WIN32
snprintf(buff, 1024, "Test:%lld,test123", llTestData);
#else
snprintf(buff, 1024, "Test:%ld,test123", llTestData);
#endif
方法二:使用PRId64宏,自动区分不同平台的格式化输出(推荐使用)
snprintf(buff, 1024, "Test:%" PRId64",test123", llTestData);
注意:
1、PRId64前面需要有一个空格分隔
2、PRId64包含inttypes.h
测试的环境:
Windows10+VS2019
CentOS7.6+gcc9.3