阅读TeXmacs的代码,我看到了:
struct texmacs_input_rep : concrete_struct {
...
};
这是什么意思?
此语法在C standard,p113中定义,但我没有找到它的含义,但那是因为我不知道如何阅读语法规则。
因为concrete_struct
是另一个struct
,它包含看起来像构造函数和虚拟析构函数的函数,因为我在其他地方读过C ++中的类实际上是struct
,默认情况下是公共成员,我想这是在C中用struct
进行继承的方式(因为它是C标准......)。
这是对的吗?
答案 0 :(得分:22)
它是C ++语法,与此相当:
class texmacs_input_rep : public concrete_struct {
public:
...
};
这是继承类的常规语法,此处texmacs_input_rep
继承自concrete_struct
。
您链接的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;
};
此处a
和b
只有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构造的一部分。它是将所定义的事物与其定义分开。
结构声明中没有:
的有效用法。