Aracılığıyla paylaş


Typedef Bildirimleri

Typedef bildirimi, depolama sınıfı olarak typedef içeren bir bildirimdir. Bildirimci yeni bir türe dönüşür. C tarafından tanımlanmış olan türler veya bildirdiğiniz türler için daha kısa veya daha anlamlı adlar oluşturmak için typedef bildirimlerini kullanabilirsiniz. Typedef adları, değişebilecek uygulama ayrıntılarını kapsüllemenize olanak sağlar.

Tür tanımı bildirimi, değişken veya işlev bildirimiyle aynı şekilde yorumlanır, ancak tanımlayıcı, bildirim tarafından belirtilen türü varsayma yerine türün eş anlamlısı olur.

Sözdizimi

declaration:
declaration-specifiersinit-declarator-listTercih ;

declaration-specifiers:
storage-class-specifierdeclaration-specifiersTercih
type-specifierdeclaration-specifiersTercih
type-qualifierdeclaration-specifiersTercih

storage-class-specifier:
typedef

type-specifier:
void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name

typedef-name:
identifier

Typedef bildirimi yeni türler oluşturmaz. Mevcut türler için eş anlamlılar veya başka şekillerde belirtilebilen türler için adlar oluşturur. Tür tanımlayıcısı adı tür tanımlayıcısı olarak kullanıldığında, belirli tür tanımlayıcılarıyla birleştirilebilir, ancak diğerleri ile birleştirilmeyebilir. Kabul edilebilir değiştiriciler ve volatileiçerirconst.

Typedef adları, ad alanını normal tanımlayıcılarla paylaşır. (Daha fazla bilgi için bkz. Ad Alanları.) Bu nedenle, bir programın typedef adı ve aynı ada sahip bir yerel kapsam tanımlayıcısı olabilir. Örneğin:

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

Bir yerel kapsam tanımlayıcısını tür tanımıyla aynı ada göre bildirdiğinizde veya aynı kapsamda veya iç kapsamda bir yapı veya birleşim üyesini bildirdiğinizde, tür tanımlayıcısını da belirtmeniz gerekir. Bu örnekte şu kısıtlama gösterilmektedir:

typedef char FlagType;
const FlagType x;

Tanımlayıcının, yapı üyesinin FlagType veya birleşim üyesinin adını yeniden kullanmak için türü sağlanmalıdır:

const int FlagType;  /* Type specifier required */

Bunu söylemek yeterli değildir

const FlagType;      /* Incomplete specification */

çünkü , FlagType yeniden işlenen bir tanımlayıcı değil türün bir parçası olarak alınır. Bu bildirim, gibi yasa dışı bir bildirim olarak alınır

int;  /* Illegal declaration */

İşaretçi, işlev ve dizi türleri dahil olmak üzere ile typedefherhangi bir türü bildirebilirsiniz. Tanımın bildirimle aynı görünürlüğe sahip olduğu sürece, yapıyı veya birleşim türünü tanımlamadan önce bir yapı veya birleşim türü işaretçisi için tür tanımı adı bildirebilirsiniz.

Typedef adları, kod okunabilirliğini geliştirmek için kullanılabilir. Aşağıdaki bildirimlerin signal üçü de, herhangi bir tür tanımı adı kullanmadan ilki olan tam olarak aynı türü belirtir.

typedef void fv( int ), (*pfv)( int );  /* typedef declarations */

void ( *signal( int, void (*) (int)) ) ( int );
fv *signal( int, fv * );   /* Uses typedef type */
pfv signal( int, pfv );    /* Uses typedef type */

Örnekler

Aşağıdaki örneklerde typedef bildirimleri gösterilmektedir:

typedef int WHOLE; /* Declares WHOLE to be a synonym for int */

Örneğin, WHOLE artık veya const WHOLE i;gibi WHOLE i; bir değişken bildiriminde kullanılabilir. Ancak bildirge long WHOLE i; yasa dışı olacaktır.

typedef struct club
{
    char name[30];
    int size, year;
} GROUP;

Bu deyim, üç üyeli bir yapı türü olarak bildirir GROUP . Bir yapı etiketi de belirtildiğinden, clubtypedef adı (GROUP) veya yapı etiketi bildirimlerde kullanılabilir. anahtar sözcüğünü struct etiketiyle kullanmanız gerekir ve anahtar sözcüğü tür tanımı adıyla kullanamazsınız struct .

typedef GROUP *PG; /* Uses the previous typedef name
                      to declare a pointer            */

Tür PG , türün GROUP işaretçisi olarak bildirilir ve bu da bir yapı türü olarak tanımlanır.

typedef void DRAWF( int, int );

Bu örnek, değer döndürmeden iki int bağımsız değişkeni alan bir işlevin türünü DRAWF sağlar. Örneğin, bildirimin

DRAWF box;

bildirimine eşdeğerdir

void box( int, int );

Ayrıca bkz.

Bildirimler ve Türler