我目前开始使用C30 ( microchip为其PIC24设备开发的基于GCC的C编译器)对微控制器进行编程,出于好奇,我启用了Strict ANSI warnings。首先,我不知道在C11注释中,像//这样的标记是“错误的”,我应该使用/*之类的*/,但真正让我惊讶的是对一行代码的警告。
“警告:使用非标准的二进制前缀”
代码行是:
OSCCONbits.COSC = 0b000;
我在网上看过C11的一个草案(ISO/IEC9899:2011),在C。http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf中找不到任何关于二进制前缀的东西。
根据C11,C的正确二进制表示法是什么?
发布于 2012-01-26 16:59:22
C没有二进制常量。(即使在C11中也不支持它们。)
他们被提议作为对C99的补充,但该提议被拒绝了。
来自C99 Rationale文档:
由于缺乏先例和效用不足,添加二进制常量的提议被拒绝。
您说您使用的是基于gcc的编译器,并且gcc支持二进制常量:它们是C语言的扩展。
整数常量可以写为二进制常量,由一系列
0和1数字组成,并以0b或0B为前缀。这在大量在位级上操作的环境(如微控制器)中特别有用。
有关更多信息,请参阅关于二进制常量的gcc页面:
http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html
发布于 2012-01-26 15:46:42
关于标准:
/
关于您的编译器问题:
结论:
发布于 2012-01-26 15:35:11
C11没有二进制文字;它只有十进制、八进制和十六进制,如标准的6.4.4.1节中所述。这与C99没有什么不同。
6.6第10段说:
实现可以接受其他形式的常量表达式。
如果我理解正确的话,它允许您的编译器提供的那种扩展;这在C99中也没有改变。
通常的解决方法是使用十六进制文字;每个十六进制数字对应四个二进制数。(当然,也可以简单地将0b000编写为0。)
https://stackoverflow.com/questions/9014958
复制相似问题