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
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
那就没办法了,无符号取负值就是没意义。
你在源代码里面搜索 mp_limb_t 定义的地方,有可能是某些宏开关控制着,看看有没有什么分支能将其定义为有符号的,然后看看怎么把这样的分支打开。
10
建议题主先编译链接调试GMP大数库自带的例子代码。
10