不匹配在Go中键入uint32和bool

时间:2017-06-10 20:45:12

标签: go

我有一个像这样定义的C宏:

#define normalize(c, a) c = (a) + ((a) == 0xFFFFFFFF)

我在Go中重写它,只要我知道Go中没有C宏这样的东西。因此,我创建了一个正常的函数:

func normalize(a uint32, c *uint32) {
    *c = a + (a == 0xFFFFFFFF)
}

问题是这给了我一个类型不匹配的错误。任何想法如何解决它?

1 个答案:

答案 0 :(得分:2)

因此,如果normalize不等于c,则您的C a宏会将a分配给0xffffffff,否则会分配给0。我不确定它是什么样的规范化,但现在不是我的关注。

因此,鉴于您提供的Go函数签名,这将起作用:

func normalize(a uint32, c *uint32) {
    if a != 0xffffffff {
        *c = a
    } else {
        *c = 0
    }
}

但是,我不确定为什么不返回值而不是通过c指针写入?

func normalize(a uint32) {
    if a != 0xffffffff {
        return a
    }
    return 0
}

旁注:这同样适用于您的C宏。顺便说一句,宏评估a两次,如果你传递一些带有副作用的函数a,这可能会让你大吃一惊。有什么理由不使用(内联)函数而不是宏,或至少使它评估为新值,而不是为它分配c