如何根据C11使用二进制前缀?

hak*_*8or 7 c compiler-construction standards standards-compliance c11

我目前正在开始使用编程微控制器C30(C基于GCC微芯片的编译器为他们的PIC24设备),我Strict ANSI warnings出于好奇而启用.首先,我不知道在C11评论标记如//是"错误的"而我应该使用/*blah blah*/,但真正令我感到惊讶的是这一行代码警告.

"警告:使用非标准二进制前缀"

代码行是:

OSCCONbits.COSC = 0b000;

我已经在线查看了C11(ISO/IEC 9899:2011)的草案之一,但在C中找不到任何关于二进制前缀的内容.http://www.open-std.org/jtc1/sc22/wg14/www /docs/n1570.pdf

根据C11,C的正确二进制表示法是什么?

oua*_*uah 19

C没有二进制常量.(即使在C11中也不支持它们.)

他们被提议作为C99的补充,但该提议遭到拒绝.

来自C99理由文件:

添加二进制常量的提议由于缺乏先例和实用程序不足而被拒绝.

您说您使用的是基于编译器gccgcc支持二进制常量:它们是C语言的GNU扩展.

整数常量可以写成二进制常量,由一系列01数字组成,前缀为0b0B.这在位级操作很多的环境(如微控制器)中特别有用.

有关gcc更多信息,请参阅有关二进制常量的页面

http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html

  • 他们觉得它没有足够的实用性.我总是在代码中使用`0b`来进行高速整数运算(与微控制器无关).例如,"0b10101010"对我来说比"0xAA"更具可读性.他们觉得没有先例,也是一个无赖的事; Java现在已经有了'0b`一段时间了. (7认同)