gpt4 book ai didi

c - 为什么 SUCCEEDED 宏中有这么多括号?

转载 作者:太空狗 更新时间:2023-10-29 17:14:45 28 4
gpt4 key购买 nike

Windows SDK 功能 SUCCEEDED 宏:

#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
-----------------------^-------------^-----

很明显,与其他宏一样,括号可以确保编译器正确解释意图。

我不明白的是为什么 (HRESULT)(hr) 周围有括号(我用 ^ 字符标记它们)。 hr 被括起来,这样一些复杂的结构就可以在那里, HRESULT 被括起来以形成 C 风格的转换,然后整个 >= 结构也有括号,那么为什么要在 (HRESULT)(hr) 周围多加一对括号?

最佳答案

C 标准将转换置于比比较更高的优先级,因此编译器不需要括号。

但是,人们阅读宏定义,将它们放入使优先级明确,因此对于阅读它的人来说很明显它是将 ((HRESULT)hr) 与零进行比较的结果,而不是强制转换结果无需考虑优先级即可进行比较。

关于c - 为什么 SUCCEEDED 宏中有这么多括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118014/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com