锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / error C2118负下标
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

锐英源精品原创,禁止任务形式的全部或局部内容的侵权使用,侵权必究

error C2118负下标

背景

近期开发平台,结合一个开源库开发,开源库升级到VS2019下编译时出“error C2118: 负下标”问题,双击后报错的代码是:

// Much of the Windows SDK assumes the default packing of structs.
#if !defined(WINDOWS_IGNORE_PACKING_MISMATCH) && !defined(__midl) && !defined(MIDL_PASS) && !defined(SORTPP_PASS) && !defined(RC_INVOKED)
#if defined(__cplusplus) && (_MSC_VER >= 1600)
static_assert(__alignof(LARGE_INTEGER) == 8, "Windows headers require the default packing option. Changing this can lead to memory corruption."
    " This diagnostic can be disabled by building with WINDOWS_IGNORE_PACKING_MISMATCH defined.");
#elif _MSC_VER >= 1300
#pragma warning(push)
#pragma warning(disable: 4116)
C_ASSERT(TYPE_ALIGNMENT(LARGE_INTEGER) == 8);
#pragma warning(pop)
#endif
#endif

C_ASSERT(TYPE_ALIGNMENT(LARGE_INTEGER) == 8); #pragma warning(pop)这一行报的错。

error C2118: 负下标分析

负下标的意思是数组的长度计算后是负的,这是编译不允许的情况,所以编译不让通过。

这个问题2个项目多个文件都报错了,一个文件报错,找代码改数组长度还行,但是多个文件都有错,根本也不可能再一一查了。

网上说的资料很模糊,没有直接解决办法。把VS里包含目录的路径顺序调整后也不行。

但是我隐约记的我台式机上很顺利编译通过了,后来回到台式机下,用VS2010确实没问题,但是用VS2019还是出上面问题。

所以确定是代码不兼容VS2019造成的,理论上高版本兼容性更好,但是这只是普遍现象,特别情况真不好说,VS2019的安装过程更复杂,内部的机制也应该和前面VS2010版本不一样。找的平台源代码是VS2005版本的SLN解决方案文件,直接升级到VS2019不行,用VS2010也是解决办法,只要产品能开发出来就行。

所以,平常多安装几个开发IDE,也不要轻易升级开发平台。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内