使用二进制格式分配变量 - 0B 在 ARM Keil uVision 中导致错误

assigning a variable using binary format - 0B causing error in ARM Keil uVision

我正在使用 keil uvision 4.7 版开发一个带有 TM4C123GH6PM 微控制器的项目。当我以二进制格式为变量赋值时,如下所示:

unsigned char tmp = 0b11000011;

然后我建工程,出现如下错误:

expected a ";"

当我将格式更改为十六进制 - 使用 0X- 或十进制时,错误消失了。

Keil uVision 中的编译器不支持二进制格式吗?

ANSI C 没有指定二进制文字的语法。 Keil 编译器遵循 ANSI C 标准,他们的手册通常会记录任何偏差或扩展。

可以在此处找到之前对此的讨论Why doesn't C have binary literals?

Keil Arm v5 (ARMCC) 编译器不支持二进制文字。但是 Keil Arm V6 (ARMCLANG) 编译器 确实 支持二进制文字。 Arm v6 编译器选项适用于 Keil MDK v5.12 及更高版本。您可能需要移植一些代码以切换编译器版本 (Migration Guide)。

打开“目标选项”--> 切换到“C/C++”选项卡--> 在“杂项控件”文本框中添加 --gnu

int a = 0b101010;这样的代码编译没有错误。

我正在使用 MDK 5.18 和 ARMCC V5.06 update1(build 61)