阅读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标准定义(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)
这a和b只有4个和3个位宽,但这是不同的语法比的问题.
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++,它的继承就像类继承一样.
| 归档时间: |
|
| 查看次数: |
9446 次 |
| 最近记录: |