为什么我不能将位域声明为自动变量?

Joe*_*Joe 2 c syntax stack bit-fields

我想声明一个使用冒号指定大小的位域(我不记得调用语法).我想写这个:

void myFunction() 
{   
  unsigned int thing : 12;
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是GCC说这是一个语法错误(它认为我正在尝试编写一个嵌套函数).我这样做没有问题:

struct thingStruct
{
  unsigned int thing : 4;
};
Run Code Online (Sandbox Code Playgroud)

然后将一个这样的结构放在堆栈上

void myFunction() 
{   
  struct thingStruct thing;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这让我相信它被语法阻止,而不是语义问题.

那么为什么第一个例子不起作用呢?我错过了什么?

JSB*_*ոգչ 6

第一个示例不起作用,因为您只能在结构中声明位域.正如你所说,这是语法,而不是语义,但它就是这样.如果需要位域,请使用结构.