[英]What does a colon in a struct declaration mean, such as :1, :7, :16, or :32?
[英]What does the colon mean in struct declarations in C?
閱讀TeXmacs的代碼,我看到了這個:
struct texmacs_input_rep : concrete_struct {
...
};
那是什么意思?
這個語法是在C標准 p113中定義的,但我沒有找到它的含義,但那是因為我不知道如何閱讀語法規則。
因為concrete_struct
是另一個struct
,它包含看起來像構造函數和虛擬析構函數的函數,因為我在其他地方讀過C ++中的類實際上是默認的公共成員struct
,我想這是在C中用struct
進行繼承的方式(因為它是C標准......)。
它是否正確?
它是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位寬,但這與問題中的語法不同。
GCC不喜歡它(當然是C模式)。
看看規范,我沒有看到第113頁(6.7.2.1)中定義的那個,它說:
struct-declarator:
declarator
declarator_opt : constant-expression
這是位域的語法,如下所示:
struct blah {
int a : 4;
int b : 4;
};
總結一下:這不是C,它是C ++,它的繼承就像類繼承一樣。
你確定這是C嗎?
您鏈接到的標准文檔沒有描述我能看到的語法。
這看起來像C ++,它確實用於表示結構繼承了另一個結構。 TeXmacs編譯頁面建議您使用C ++編譯器,對我而言,它意味着它是用C ++編寫的,而不是C.
我快速查看了TeXmacs源存檔,看到了很多“.cpp”文件。
:
標准中的文本不是C結構的一部分。 它是將所定義的事物與其定義分開。
在結構聲明中沒有有效的使用:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.