a->data
的类型为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
设置。
答案 0 :(得分:2)
如果您不想进行投射,我建议您编写自己的包装函数,将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);
}