我正在尝试为android 构建md5deep(http://md5deep.sourceforge.net/),但是使用默认的构建设置,sizeof(off_t) == 8失败的断言,指示(AFAIK)LFS未启用.我已经尝试通过添加-D_FILE_OFFSET_BITS=64gcc和g ++标志来启用,但它仍然没有做到这一点.添加行来打印_FILE_OFFSET_BITS和sizeof(off_t)的值表明前者确实是64,但后者是4而不是8.
有什么想法吗?
我有一个C函数:
int64_t fn(int64_t a, int32_t b, int32_t c, int32_t d)
{
/* should return (a * b * c)/d */
}
Run Code Online (Sandbox Code Playgroud)
a可能接近INT64_MAX,但最终结果不会溢出,例如,如果b = 1,c = d = 40.但是,我无法弄清楚如何计算这个以便我永远不会丢失数据舍入(通过先进行除法)或中间结果溢出.
如果我可以访问足够大的数据类型以适应a,b和c的整个产品,我只会在该类型中进行数学计算然后截断,但有没有一些方法可以在没有大整数的情况下执行此操作?