【问题标题】:GCC incompatible pointer type warning with intrinsic functions具有内在函数的 GCC 不兼容指针类型警告
【发布时间】:2015-09-12 12:05:43
【问题描述】:

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

【问题讨论】:

    标签: c gcc


    【解决方案1】:

    如果您不想强制转换,我建议您编写自己的包装函数,将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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多