检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项

77 篇文章 6 订阅
文章讨论了在C++编程中遇到的LNK2038错误,该错误涉及_CRT_STDIO_ISO_WIDE_SPECIFIERS宏定义的不匹配。作者提出了解决宏定义冲突的方法,包括创建封装源文件以隔离冲突的头文件,并调整VisualStudio的预处理命令设置。此外,文章还探讨了Windows和C标准在格式规范上的差异,以及_CRT_STDIO_ISO_WIDE_SPECIFIERS宏的历史和作用。
摘要由CSDN通过智能技术生成

libboost_thread-vc142-mt-x64-1_82.lib(thread.obj) : error LNK2038: 检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项: 值“0”不匹配值“1”(AcadStr.obj 中)
1> 正在创建库 x64\Release\ArxDbg.lib 和对象 x64\Release\ArxDbg.exp
: fatal error LNK1319: 检测到 1 个不匹配项
1>已完成生成项目“ArxDbg.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
天天都是这种问题
以Debug或Release方式运行,会出现很多问题,我们逐一解决。

c++宏定义_CRT_STDIO_ISO_WIDE_SPECIFIERS

第三方库宏定义冲突解决办法
假如项目用到的两个第三方库,lib_a和lib_b中,头文件a.h和b.h存在宏定义冲突的问题。

那么可以创建一个源文件c.cpp和c.h,将lib_a或lib_b的头文件封装在c.cpp中,在c.h中提供新的接口声明方便自己程序调用即可。

https://blog.csdn.net/RNAMatrix/article/details/5765462

c++预处理器宏定义不匹配
(1) 预处理命令问题,表现为:

LNK2038 检测到“_CRT_STDIO_ISO_WIDE_SPECIFIERS”的不匹配项: 值“1”不匹配值“0”(MainWindow.obj 中) Heart G:\008_Practice\005_PracticeCPP\20200713_MathGL-Qt-openCV\Heart\Heart\mgl-qt5-static.lib(mocs_compilation.obj)
1
解决:进入项目的属性页面,修改预处理命令(Debug和Release分别修改),如下图。
https://blog.csdn.net/JinKairu/article/details/107348999

That's correct,  I'm surprised that setting _CRT_STDIO_ISO_WIDE_SPECIFIERS was there in RD2020 too.

I was wondering why didn't you encounter this earlier.   :thinking_face:

Anyway the reason for this whole rigmarole is Windows adopted Unicode prior than C standard

 

 

Format	Windows classic	C standard	 
%s	printf	char*	char*%s	wprintf	wchar_t*	char*
%S	printf	wchar_t*	N/A
%S	wprintf	char*	N/A
%hs	printf	char*	char*%hs	wprintf	char*	char*%ls	printf	wchar_t*	wchar_t*%ls	wprintf	wchar_t*	wchar_t*%ws	printf	wchar_t*	N/A
%ws	wprintf	wchar_t*	N/A
 

<= :  These rows where the C standard agrees with the Windows classic format.

The Windows classic format came first, so the question is whether the C standard chose to align with the Windows classic format, rather than vice versa.

 
 

Defining _CRT_STDIO_ISO_WIDE_SPECIFIERS works as of Visual Studio 2019 and enables C99-conforming format specifiers.

As per my blog you stated, this was introduced in Visual Studio 2015 and was initially intended to be the new default, but that idea was subsequently abandoned.

 

Short answer : Don't use it.

arx里面的_CRT_STDIO_ISO_WIDE_SPECIFIERS继承自这个
rxsdk_common.props

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lst0426

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值