首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用符合C11的二进制前缀?

如何使用符合C11的二进制前缀?
EN

Stack Overflow用户
提问于 2012-01-26 15:18:03
回答 4查看 11.6K关注 0票数 8

我目前开始使用C30 ( microchip为其PIC24设备开发的基于GCCC编译器)对微控制器进行编程,出于好奇,我启用了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的正确二进制表示法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-26 16:59:22

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

他们被提议作为对C99的补充,但该提议被拒绝了。

来自C99 Rationale文档:

由于缺乏先例和效用不足,添加二进制常量的提议被拒绝。

您说您使用的是基于gcc的编译器,并且gcc支持二进制常量:它们是C语言的扩展。

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

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

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

票数 22
EN

Stack Overflow用户

发布于 2012-01-26 15:46:42

关于标准:

  • ANSI C / "Strict ANSI“通常指的是C语言的第一个标准版本,该标准版本仅在1989年的美国标准化。当C语言成为国际C语言标准时,

/

  • ANSI/89在1990年成为国际C语言标准,称为"C90“。当涉及到技术细节时,C89和C90是等价的。
  • C90在1999年ISO C更新时就过时了。新标准被称为“C99”。
  • C99于2011年过时。新标准被称为“C11”。

关于您的编译器问题:

  • C89/C90不允许//注释。它们是在C99中引入的。它们尚未在C11中删除。
  • 二进制表示法从未成为任何C标准的一部分。

结论:

  • 您最有可能在C90编译器上编译代码,其中包含一些可用的非标准扩展。
票数 4
EN

Stack Overflow用户

发布于 2012-01-26 15:35:11

C11没有二进制文字;它只有十进制、八进制和十六进制,如标准的6.4.4.1节中所述。这与C99没有什么不同。

6.6第10段说:

实现可以接受其他形式的常量表达式。

如果我理解正确的话,它允许您的编译器提供的那种扩展;这在C99中也没有改变。

通常的解决方法是使用十六进制文字;每个十六进制数字对应四个二进制数。(当然,也可以简单地将0b000编写为0。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9014958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档