Aracılığıyla paylaş


Yapı Bildirimleri

"Yapı bildirimi", bir türü adlandırıp farklı türlere sahip olabilecek değişken değerleri (yapının "üyeleri" veya "alanları" olarak adlandırılır) sırasını belirtir. "Etiket" olarak adlandırılan isteğe bağlı tanımlayıcı, yapı türünün adını verir ve yapı türüne yapılan sonraki başvurularda kullanılabilir. Bu yapı türündeki bir değişken, bu tür tarafından tanımlanan tüm diziyi tutar. C'deki yapılar, diğer dillerde "kayıtlar" olarak bilinen türlere benzer.

Sözdizimi

struct-or-union-specifier:
struct-or-unionidentifierTercih { struct-declaration-list }
struct-or-union identifier

struct-or-union:
struct
union

struct-declaration-list:
struct-declaration
struct-declaration-list struct-declaration

struct-declaration:
specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list:
type-specifierspecifier-qualifier-listTercih
type-qualifierspecifier-qualifier-listTercih

struct-declarator-list:
struct-declarator struct-declarator-list , struct-declarator

struct-declarator:
declarator
type-specifierdeclaratorTercih : constant-expression

Bir yapı türünün bildirimi, bir yapı için alan ayırmaz. Yalnızca yapı değişkenlerinin daha sonraki bildirimleri için bir şablon.

Daha önce tanımlanmış identifier bir (etiket) başka bir yerde tanımlanan bir yapı türüne başvurmak için kullanılabilir. Bu durumda, struct-declaration-list tanım görünür olduğu sürece tekrarlanamaz. Yapı türleri için yapılara ve tür tanımlarına yönelik işaretçi bildirimleri, yapı türü tanımlanmadan önce yapı etiketini kullanabilir. Ancak, alanların boyutunun gerçek kullanımından önce yapı tanımıyla karşılaşılmalıdır. Bu kullanım, türün ve tür etiketinin tamamlanmamış bir tanımıdır. Bu tanımın tamamlanması için, aynı kapsamda daha sonra bir tür tanımının görünmesi gerekir.

, struct-declaration-list yapı üyelerinin türlerini ve adlarını belirtir. Bağımsız struct-declaration-list değişken bir veya daha fazla değişken veya bit alanı bildirimi içerir.

içinde struct-declaration-list bildirilen her değişken, yapı türünün bir üyesi olarak tanımlanır. içindeki struct-declaration-list değişken bildirimleri, bu bölümde açıklanan diğer değişken bildirimleriyle aynı forma sahiptir, ancak bildirimler depolama sınıfı tanımlayıcıları veya başlatıcılar içeremez. Yapı üyeleri, türü void, tamamlanmamış bir tür veya işlev türü dışında herhangi bir değişken türüne sahip olabilir.

Bir üye, göründüğü yapı türüne sahip olarak bildirilemiyor. Ancak, bir üye, yapı türü etiketine sahip olduğu sürece göründüğü yapı türüne işaretçi olarak bildirilebilir. Bağlantılı yapı listeleri oluşturmanıza olanak tanır.

Yapılar diğer tanımlayıcılarla aynı kapsam belirlemeyi izler. Yapı tanımlayıcıları aynı görünürlüğe sahip diğer yapı, birleşim ve numaralandırma etiketlerinden ayrı olmalıdır.

içindeki her struct-declaration birinin struct-declaration-list listede benzersiz olması gerekir. Ancak, içindeki struct-declaration-list tanımlayıcı adlarının sıradan değişken adlarından veya diğer yapı bildirim listelerindeki tanımlayıcılardan ayrı olması gerekmez.

İç içe yapılara, dosya kapsamı düzeyinde bildirilmiş gibi de erişilebilir. Örneğin, bu bildirim göz önünde bulundurulduğunda:

struct a
{
    int x;
    struct b
    {
      int y;
    } var2;
} var1;

bu bildirimlerin her ikisi de yasaldır:

struct a var3;
struct b var4;

Örnekler

Bu örnekler, yapı bildirimlerini gösterir:

struct employee   /* Defines a structure variable named temp */
{
    char name[20];
    int id;
    long class;
} temp;

Yapı employee üç üyeye sahiptir: name, idve class. Üye name 20 öğeli bir dizidir ve id class sırasıyla ve long türüne sahip int basit üyelerdir. Tanımlayıcı employee , yapı tanımlayıcısıdır.

struct employee student, faculty, staff;

Bu örnek üç yapı değişkeni tanımlar: student, facultyve staff. Her yapı üç üyeden oluşan aynı listeye sahiptir. Üyelerin, önceki örnekte tanımlanan yapı türüne employeesahip olduğu bildirilir.

struct           /* Defines an anonymous struct and a */
{                /* structure variable named complex  */
    float x, y;
} complex;

Yapıcomplex, x türü ve yolan float iki üyeye sahiptir. Yapı türünün etiketi yoktur ve bu nedenle adsız veya anonimdir.

struct sample   /* Defines a structure named x */
{
    char c;
    float *pf;
    struct sample *next;
} x;

Yapının ilk iki üyesi bir değişken ve bir char değerin işaretçisidir float . Üçüncü üye, nexttanımlanan yapı türüne (sample) ilişkin bir işaretçi olarak bildirilir.

Anonim yapılar, etiket adı gerekli olmadığında, örneğin bir bildirimin tüm yapı örneklerini tanımlaması gibi durumlarda yararlı olabilir. Örneğin:

struct
{
    int x;
    int y;
} mystruct;

Katıştırılmış yapılar genellikle anonimdir.

struct somestruct
{
    struct    /* Anonymous structure */
    {
        int x, y;
    } point;
    int type;
} w;

Microsoft'a Özgü

Derleyici, bir yapının son üyesi olarak unsized veya sıfır boyutlu bir diziye izin verir. Çeşitli durumlarda kullanıldığında sabit bir dizinin boyutu farklıysa kullanışlıdır. Böyle bir yapının bildirimi şöyle görünür:

struct identifier { set-of-declarations type array-name []; };

Unsized diziler yalnızca bir yapının son üyesi olarak görünebilir. Herhangi bir kapsayan yapıda başka üye bildirilmediği sürece, unsized dizi bildirimleri içeren yapılar diğer yapıların içinde iç içe yerleştirilebilir. Bu tür yapıların dizilerine izin verilmez. işleci sizeof , bu türdeki bir değişkene veya türün kendisine uygulandığında, dizinin boyutu için 0 olduğunu varsayar.

Yapı bildirimleri, başka bir yapının veya birleşimin üyesi olduklarında bildirimci olmadan da belirtilebilir. Alan adları kapsayan yapıya yükseltilir. Örneğin, adsız bir yapı şuna benzer:

struct s
{
    float y;
    struct
    {
        int a, b, c;
    };
    char str[10];
} *p_s;
.
.
.
p_s->b = 100;  /* A reference to a field in the s structure */

Yapı başvuruları hakkında daha fazla bilgi için bkz . Yapı ve Birleşim Üyeleri.

END Microsoft'a Özgü

Ayrıca bkz.

Bildirimler ve Değişken Bildirimleri