Code Bye

GMP大数库的问题gmp.h(2177): error C4146: 一元负运算符应用于无符号类型,结果仍为无

include “gmph” 空实现。直接报1>c:\workspace\test\test\gmp.h(2177): error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型。这个怎么解决呢。
gmp.h文件中报错部分代码。
#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg)
#if ! defined (__GMP_FORCE_mpn_neg)
__GMP_EXTERN_INLINE
#endif
mp_limb_t
mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n)0
{
mp_limb_t __gmp_ul, __gmp_cy;
__gmp_cy = 0;
do {
__gmp_ul = *__gmp_up++;
*__gmp_rp++ = -__gmp_ul – __gmp_cy;                 /////////////2177行。报错问题所在行
__gmp_cy |= __gmp_ul != 0;
} while (–__gmp_n != 0);
return __gmp_cy;
}
#endif
解决方案

10

mp_limb_t 是什么类型,无符号的吗?

10

https://msdn.microsoft.com/zh-cn/library/4kh09110.aspx

10

引用:
Quote: 引用:

mp_limb_t 是什么类型,无符号的吗?

typedef unsigned int mp_limb_t;  是的。这个文件是本人通过编译gmp得到的。不是本人直接写的,。

那就没办法了,无符号取负值就是没意义。
你在源代码里面搜索 mp_limb_t 定义的地方,有可能是某些宏开关控制着,看看有没有什么分支能将其定义为有符号的,然后看看怎么把这样的分支打开。

10

建议题主先编译链接调试GMP大数自带的例子代码。

10

引用:
Quote: 引用:

建议题主先编译链接调试GMP大数自带的例子代码。

本人只引用了下他的头文件。main里面为空。

你编译链接调试过一个GMP大数自带的例子代码吗?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明GMP大数库的问题gmp.h(2177): error C4146: 一元负运算符应用于无符号类型,结果仍为无