精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止任务形式的全部或局部内容的侵权使用,侵权必究
近期开发平台,结合一个开源库开发,开源库升级到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)这一行报的错。
负下标的意思是数组的长度计算后是负的,这是编译不允许的情况,所以编译不让通过。
这个问题2个项目多个文件都报错了,一个文件报错,找代码改数组长度还行,但是多个文件都有错,根本也不可能再一一查了。
网上说的资料很模糊,没有直接解决办法。把VS里包含目录的路径顺序调整后也不行。
但是我隐约记的我台式机上很顺利编译通过了,后来回到台式机下,用VS2010确实没问题,但是用VS2019还是出上面问题。
所以确定是代码不兼容VS2019造成的,理论上高版本兼容性更好,但是这只是普遍现象,特别情况真不好说,VS2019的安装过程更复杂,内部的机制也应该和前面VS2010版本不一样。找的平台源代码是VS2005版本的SLN解决方案文件,直接升级到VS2019不行,用VS2010也是解决办法,只要产品能开发出来就行。
所以,平常多安装几个开发IDE,也不要轻易升级开发平台。