gpt4 book ai didi

c - 预处理器宏 : Missing parenthesis

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:20 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2013 并尝试编写预处理器宏,它将在编译时检查 VERSION 是否为有效的 BCD 数字:

#define VERSION (uint8)0x01u

#if ((VERSION > 0x99u) || ((VERSION & 0x0Fu) > 0x09u))
#error "Invalid version"
#endif

但由于某些原因 VS2013 显示以下消息:

error C1012: unmatched parenthesis : missing ')'

我已经检查了几次我的括号 - 但我觉得它是正确的。有什么我想念的吗?

最佳答案

预处理器不理解类型,所以这行不通。假设 uint8 不是宏,这将扩展为

#if (((0)0x01u > 0x99u) || (((0)0x01u & 0x0Fu) > 0x09u))

因为宏替换后剩下的所有标识符都被零替换了。这显然有语法错误。您收到的错误消息似乎误导了我,但您收到错误消息这一事实是恰当的。

你真的需要 VERSION 来拥有 uint8 类型吗?如果没有,您可以简单地删除强制转换。

如果您确实需要将它作为 uint8 类型,您需要以这样一种方式编写表达式,即使它被 0 替换,它仍然有效,例如 ((uint8)+0x01u)

关于c - 预处理器宏 : Missing parenthesis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158329/

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