C/XC8 语法 : Can invert and AND operation be used in the same statement?

标签 c syntax xc8

我正在为 PIC 微 Controller 在 xc8 编译器中编写 C 代码。此代码将使用 CCP 模块控制风扇(电机)的开/关和速度。

要打开/关闭 CCP 模块以及风扇,我像这样切换 CCP1CON 位

ccp1conValue = CCP1CON;
ccp1conValue = ~ccp1conValue & 0x0F;
ccp1conValue = CCP1CON;

我担心的是这种语法在 XC8 中是否正确且可接受?我可以在同一语句中使用 invert 和 AND 运算还是需要分别进行?或者是否有更好的方法来完全做到这一点?

最佳答案

这是有效的 C 语法,任何稍微兼容的编译器都应该优雅地处理它。虽然人们经常在一行 C 代码中插入合理的做法,但我个人会判断您所做的是完全可以接受的。

组合多个操作时要注意的一件事是运算符优先级。

你的声明:

~ccp1conValue & 0x0F

相当于:

(~ccp1conValue) & 0x0F

这可能是您想要做的,但最好记住。

此外,最后一行:

ccp1conValue = CCP1CON;

应该是:

CCP1CON = ccp1conValue;

相反。

根据您是否需要保留该值,您可以将这三行替换为:

CCP1CON = ~CCP1CON & 0x0F;

关于C/XC8 语法 : Can invert and AND operation be used in the same statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57007948/

相关文章:

脚本中的 Python 3 控制流有很多步骤

c - 错误: (1098) conflicting declarations for variable "_sprintf" in XC8

调用 setbuf(stdout, NULL) : no symbol "NULL" in the current context

regex - Go 中的 "Unknown escape sequence"错误

c - if-else block 中的 'if (0)' block 的用途是什么?

\r\n 和\n 之间的 PHP 区别

atmega - Atmega644 中的初始 EEPROM 内容

c - 使用未声明的标识符 'RD16'

c - 如何向 main() 函数添加不同组的参数?

c++ - "NUL"字符 ("\0") 字节是分开的还是分配给带有字符串的字符数组?