Microchip弯曲C的规则?

jay*_*jay 2 c standards struct typedef pic

当我遇到一堆看起来像这样的结构时,我正在挖掘一些与PIC单片机相关的headder文件:

typedef struct tagPORTDBITS {
  unsigned RD0:1;
  unsigned RD1:1;
  unsigned RD2:1;
  unsigned RD3:1;
  unsigned RD4:1;
  unsigned RD5:1;
  unsigned RD6:1;
  unsigned RD7:1;
  unsigned RD8:1;
  unsigned RD9:1;
  unsigned RD10:1;
  unsigned RD11:1;
  unsigned RD12:1;
  unsigned RD13:1;
  unsigned RD14:1;
  unsigned RD15:1;
} PORTDBITS;
Run Code Online (Sandbox Code Playgroud)

这是标准C吗?我无法找到任何其他类似的东西,即变量定义后的":1"

我假设所有元素都代表位,那么这是Microchip对C编译器的补充,以使嵌入式程序员更容易吗?

ASh*_*lly 8

这是一个C 位域,它是一个完全有效的(虽然是不可移植的)构造.有关详细信息,请参阅此处此处.

尽管位域中的数据布局是实现定义的并且因此是不可移植的,但是它们通常用于嵌入式处理中以将寄存器的各个位映射到逻辑名称.这是有效的,因为大多数嵌入式处理器使用自己的特定工具链,其中很容易理解位域布局规则.


Jes*_*per 5

是的,这是标准C.这个名称是位字段.