下面的代码片段按原样工作,但如果我取消注释第一个#定义并注释第二个,编译器就会抱怨赋值语句中应出现“)”。我想可能是想找个演员,但没用。请指出我愚蠢的疏忽。
谢谢,
金华
//#define SMI_READ (0b10 << 10)
#define SMI_READ (0x2 << 10)
...
command |= SMI_READ;
最佳答案
一般来说,要回答这样的问题,我们需要看到错误消息的完整和未经编辑的文本,如果您提供一个完整的程序,我们可以尝试为自己编译,这也确实有帮助。(在您看来,错误消息似乎是无用的,但通常只有当您知道如何像编译器工程师一样思考时,它们才有意义。)
但是,在这种情况下,我可以做出高置信度的猜测,因为两个宏之间的唯一区别是,不工作的宏使用二进制数0b10
,而工作的宏使用十六进制数0x2
。二进制数不是C标准的任何版本的一部分,尽管它们是一个常见的扩展因此,我推断您的编译器不支持它们,并在遇到它们时给出一个不清楚的错误消息。
关于c - C-在#defines中表示二进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44377937/