匿名類別類型

類別可以是匿名的 ,也就是說,可以宣告它們,而不使用 識別碼 。 當您將類別名稱取代為 typedef 名稱時,這非常有用,如下所示:

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

注意

上述範例中的匿名類別用法對於保留與現有 C 程式碼的相容性而言很實用。 在某些 C 程式碼中,搭配匿名結構的使用 typedef 很普遍。

另外,當您想要讓類別成員的參考出現,就像該參考不是包含在另一個類別中一般時,匿名類別也相當實用,如下所示:

struct PTValue
{
    POINT ptLoc;
    union
    {
        int  iValue;
        long lValue;
    };
};

PTValue ptv;

在上述程式碼中, iValue 可以使用物件成員選取運算子 ( . )來存取,如下所示:

int i = ptv.iValue;

匿名類別會受到某些限制 (如需匿名聯集的詳細資訊,請參閱 Unions .)匿名類別:

  • 不能具有建構函式或解構函式。

  • 無法當做引數傳遞至函式(除非使用省略號來失敗類型檢查)。

  • 不可做為函式的傳回值傳回。

匿名結構

Microsoft 特定的

Microsoft C 擴充功能可讓您在另一個結構內宣告結構變數,而不需為它命名。 這些巢狀結構稱為匿名結構。 C++ 不允許匿名結構。

您可以存取匿名結構的成員,就如同它們是包含結構中的成員。

// anonymous_structures.c
#include <stdio.h>

struct phone
{
    int  areacode;
    long number;
};

struct person
{
    char   name[30];
    char   gender;
    int    age;
    int    weight;
    struct phone;    // Anonymous structure; no name needed
} Jim;

int main()
{
    Jim.number = 1234567;
    printf_s("%d\n", Jim.number);
}
//Output: 1234567

END Microsoft 特定的