簡體   English   中英

冒號在C中的結構聲明中意味着什么?

[英]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中的語法:

您鏈接到的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位寬,但這與問題中的語法不同。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM