繁体   English   中英

带有内部函数的 GCC 不兼容指针类型警告

[英]GCC incompatible pointer type warning with intrinsic functions

a->data的类型是uint64_t * 我在头文件中uint64_t了一下, uint64_t被定义为unsigned long int 我想使用_addcarryx_u64函数。 根据头文件,此函数的最后一个参数是unsigned long long *类型。

两者都是无符号的 64 位整数。 然而,从技术上讲,它们是不同的,我不断收到这样令人讨厌的警告......

warning: passing argument 4 of ‘_addcarryx_u64’ from incompatible pointer type

char c = _addcarryx_u64(0, a->data[0], b, a->data);

我该如何解决此问题或禁用警告。 我知道我可以投射我的指针,但我喜欢以某种独立于编译的方式进行编码,并且addcarryx可以在另一个系统上以不同的方式定义。

另外,我注意到我的 gcc 版本只支持addcarryx而不是普通的addcarry 有什么理由吗?

也只是为了让您知道我正在 ubuntu 上运行 GCC 4.9 编译。 我有-std=gnu99设置。

如果您不想强制转换,我建议您编写自己的包装函数,将a->data转换为正确的类型,然后传递一个指向该类型的指针:

struct a_struct {
    /* ... */
    uint64_t *data;
};

char addcarry_u64(int x, struct a_struct *a, int b) {
    unsigned long long data = *a->data;
    return _addcarryx_u64(0, a->data[0], b, &data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM