const 结构声明

Ric*_*urs 4 c struct constants declaration

有人能告诉我结构声明的这两个版本之间的区别吗?

struct S
{
  uint8_t a;
};
Run Code Online (Sandbox Code Playgroud)

const struct S
{
  uint8_t a;
}
Run Code Online (Sandbox Code Playgroud)

其次是:

void main(void)
{
  struct S s = {1};
  s.a++;
}
Run Code Online (Sandbox Code Playgroud)

提示,我已经在 Visual Studio C++ 2010 Express 中尝试了 S 的两个版本,所以我知道两者都编译出错。

“const struct”什么都不做?"const struct S s = {1};" 当然可以,但这不是目前的问题。

问候丰富

/********************************************/
Run Code Online (Sandbox Code Playgroud)

我刚刚弄清楚了什么

const struct <typename> <{type}> <variable instances a, b, .., z>;
Run Code Online (Sandbox Code Playgroud)

是在做:

当 const 出现在“struct”之前时,所有变量实例都是 const,就好像它们被定义为:

const struct <typename> a, b, z;
Run Code Online (Sandbox Code Playgroud)

所以它确实做了一些事情,但当没有与结构声明一致的实例定义时就不会。

富有的

Dan*_*ien 6

和:

const struct S
{
  uint8_t a;
};
Run Code Online (Sandbox Code Playgroud)

那里的限定符const是无意义的,甚至可能会导致某些 C 编译器出现编译错误。gcc发出警告。

其目的似乎是声明数据类型struct S。在这种情况下,正确的语法是:

struct S
{
  uint8_t a;
};
Run Code Online (Sandbox Code Playgroud)


Alo*_*ave 5

结构声明只是定义了数据类型。

const限定符适用于变量而不是数据类型。因此,在结构声明之前添加 const 最多应该是多余的。

  • 我认为这是+1,因为“类型”和“限定符”之间的区别,这在这里很重要。 (2认同)