Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
"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-union
identifier
Tercih {
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-specifier
specifier-qualifier-list
Tercih
type-qualifier
specifier-qualifier-list
Tercih
struct-declarator-list
:
struct-declarator
struct-declarator-list
,
struct-declarator
struct-declarator
:
declarator
type-specifier
declarator
Tercih :
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
, id
ve 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
, faculty
ve staff
. Her yapı üç üyeden oluşan aynı listeye sahiptir. Üyelerin, önceki örnekte tanımlanan yapı türüne employee
sahip olduğu bildirilir.
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
Yapıcomplex
, x
türü ve y
olan 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, next
tanı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ü