冒号在C中的结构声明中意味着什么?

Gzo*_*org 9 c c++

阅读TeXmacs的代码,我看到了这个:

struct texmacs_input_rep : concrete_struct {
...
};
Run Code Online (Sandbox Code Playgroud)

那是什么意思?

这个语法是在C标准 p113中定义的,但我没有找到它的含义,但那是因为我不知道如何阅读语法规则.

因为concrete_struct是另一个struct,它包含看起来像构造函数和虚拟析构函数的函数,并且因为我在其他地方读过C++中的类实际上struct默认使用公共成员,我想这是struct在C 中进行继承的方式(因为它是C标准......).

它是否正确?

sth*_*sth 22

它是C++语法,相当于:

class texmacs_input_rep : public concrete_struct {
public:
...
};
Run Code Online (Sandbox Code Playgroud)

这是继承类的正常语法,这里texmacs_input_rep继承自concrete_struct.

关于C中的语法:

您链接到的C标准定义(6.7.2.1):

struct-or-union-speci?er:
    struct-or-union identi?eropt { struct-declaration-list }
    struct-or-union identi?er

struct-or-union:
    struct
    union

所以根据C必须是struct,然后是一个可选的标识符,然后是{.或者只有struct一个标识符(前向声明).在这两种情况下,都没有额外的空间: ....

:标准的该段后述是关于位域的宽度,这样;

struct foo {
  unsigned a : 4;
  unsigned b : 3;
};
Run Code Online (Sandbox Code Playgroud)

ab只有4个和3个位宽,但这是不同的语法比的问题.


246*_*tNt 7

GCC不喜欢它(当然是C模式).

看看规范,我没有看到第113页(6.7.2.1)中定义的那个,它说:

struct-declarator:
    declarator
    declarator_opt : constant-expression
Run Code Online (Sandbox Code Playgroud)

这是位域的语法,如下所示:

struct blah {
    int a : 4;
    int b : 4;
};
Run Code Online (Sandbox Code Playgroud)

总结一下:这不是C,它是C++,它的继承就像类继承一样.