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

时间:2009-11-03 10:46:55

标签: c++ c

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

struct texmacs_input_rep : concrete_struct {
...
};

这是什么意思?

此语法在C standard,p113中定义,但我没有找到它的含义,但那是因为我不知道如何阅读语法规则。

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

这是对的吗?

4 个答案:

答案 0 :(得分:22)

它是C ++语法,与此相当:

class texmacs_input_rep : public concrete_struct {
public:
...
};

这是继承类的常规语法,此处texmacs_input_rep继承自concrete_struct

关于C:

中的语法

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

struct-or-union-specifier:
    struct-or-union identifieropt { struct-declaration-list }
    struct-or-union identifier

struct-or-union:
    struct
    union

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

标准的那一段后面提到的:是关于位字段宽度的,像这样;

struct foo {
  unsigned a : 4;
  unsigned b : 3;
};

此处ab只有4位和3位宽,但这与语句中的语法不同。

答案 1 :(得分:7)

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

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

struct-declarator:
    declarator
    declarator_opt : constant-expression

这是像这样的位域的语法:

struct blah {
    int a : 4;
    int b : 4;
};

总结一下:这不是C,它是C ++,它继承类继承。

答案 2 :(得分:3)

你确定这是C吗?

您链接到的标准文档没有描述我能看到的语法。

这看起来像C ++,它确实用来说结构继承了另一个结构。 TeXmacs compilation page建议您使用C ++编译器,对我来说这意味着它是用C ++编写的,而不是C语言。

我快速查看了TeXmacs源存档,看到了很多“.cpp”文件。

答案 3 :(得分:2)

标准文本中的:不是C构造的一部分。它是将所定义的事物与其定义分开。

结构声明中没有:的有效用法。