C Proqramlaşdırmada Typedef

Strukturları və birlikləri necə elan edəcəyimizi, onları necə başlatacağımızı və necə əldə edəcəyimizi gördük. Bəzən proqramda eyni quruluşu / birliyi bir çox yerdə - fərqli funksiyalarda istifadə etməli ola bilərik. Belə hallarda bu strukturlar / birliklər üçün eyni quruluşu təkrar-təkrar yaratmağımızla nəticələnə bilər. Bunun əvəzinə əvvəlində bu quruluşlar / birliklər üçün istifadəçi tərəfindən müəyyən edilmiş bir məlumat növü yarada bilərik və dəyişənləri elan etmək üçün proqram / funksiyanın hər hansı bir yerində bu yeni yaradılan məlumat növündən istifadə edə bilərik.

Məsələn istifadəçidən tələbə detallarını qəbul etmək üçün bir funksiyanı və quruluşdakı dəyərləri göstərmək üçün başqa bir funksiyanı ehtiva edən bir proqramı nəzərdən keçirin. İndi həm bu funksiya həm məlumatları qəbul etmək həm də məlumatları çap etmək üçün eyni quruluş skeletinə daxil olur. Buna görə əvvəlcə tələbə quruluşunun skeletini yaratdıq və sonra onlara çatmaq üçün bütün funksiyada quruluş dəyişənini yaratmalıyıq.

struct student {
	int intStdId;
	char chrStdName [15];
	int intAge;
	char chrClassId [10];
};

Tələbə üçün quruluş dəyişənini yaratdığımızda, funksiyalar boyunca bir neçə dəfə aşağıda göstərildiyi kimi yazırıq

quruluş tələbə struktur_std;

Bütün funksiyalarda bir neçə dəfə böyük sətirlərin üstünə yazmaq əvəzinə, typedef istifadə edərək struktur tələbəsi üçün istifadəçi tərəfindən müəyyən edilmiş məlumat növü yarada bilərik.

yəni;

  typedef struct student {

        int intStdId;
        char chrStdName [15];
        int intAge;
        char chrClassId [10];
    } struct_student;

İndi struct_student tələbə tipli bir struktur dəyişkənliyini elan etmək üçün bütün funksiyalardan məlumat növü kimi istifadə edilə bilər.

yəni;     struktur_tələbə struktur_std;

#include  
#include  

typedef struct student{  
	int intStdId;
	char chrStdName[15];
	int intAge;
	char chrClassId[10];
	struct address{
		int intDoorNum;
		char chrstreet[15];
		char chrCity[15];
		char chrState[15];
		int intPincode;
	};
}struct_std;
void main() {
	struct_std struct_std1, struct_std2; //Instead of  'struct student struct_std1, struct_std2' user defined name is used as datatype

	struct_std1.intStdId = 100; 	strcpy(struct_std1.chrStdName, "Rose");
	struct_std1.intAge = 20;	strcpy(struct_std1.chrClassId, "CLS_001");
	struct_std1.intDoorNum = 121;	strcpy(struct_std1.chrState, "Bangalore");
	
	struct_std2.intStdId = 200; 	strcpy(struct_std2.chrStdName, "Mathew");
	struct_std2.intAge = 22;	strcpy(struct_std2.chrClassId, "CLS_232");

	printf("\nValue of student Id in struct_std1 is : %d", struct_std1.intStdId);
	printf("\nValue of student Name in struct_std1 is : %s", struct_std1.chrStdName);
	printf("\nValue of student age in struct_std1 is : %d", struct_std1.intAge);
	printf("\nValue of student class  in struct_std1 is : %s", struct_std1.chrClassId);
	printf("\nValue of Door Number in struct_std1 is : %d", struct_std1.intDoorNum);

	printf("\nValue of student Id in struct_std2 is : %d", struct_std2.intStdId);
	printf("\nValue of student Id in struct_std2 is : %s", struct_std2.chrStdName);
	printf("\nValue of student Id in struct_std2 is : %d", struct_std2.intAge);
	printf("\nValue of student Id in struct_std2 is : %s", struct_std2.chrClassId);
}

Həmkarlar ittifaqlarını müəyyənləşdirmək üçün eyni metodu istifadə edə bilərik. Həmkarlar ittifaqları üçün, proqramda və funksiyalarda onları təkrarən elan etmək üçün istifadəçi tərəfindən müəyyən edilmiş məlumat tipləri yaradacaqdır

C proqramında sadə və mürəkkəb məlumat tiplərinə imkan verir. Mürəkkəb məlumat tiplərinə massivlər, göstəricilər, quruluşlar, birliklər və s. Daxildir. Mürəkkəb məlumat tipləri halında, bunları proqramda dəfələrlə istifadə etməyimiz lazım olsa, onları təkrar-təkrar yazmaq yorucu olur. Bunun əvəzinə, bu mürəkkəb olanlar üçün istifadəçi tərəfindən müəyyən edilmiş bir məlumat növü varsa, yazmaq, anlamaq və istifadə etmək asandır. Bu 'typedef' əmrini istifadə edərək edilir.

İstifadəçilərə məlumat növü üçün adını yenidən təyin etməyə imkan verir. Məsələn, tələbə kimliyi, tələbə adı, yaşı və ünvanı olduğu tələbə quruluşu.

struct Student {
	int StdId;
	char StdName[100];
	int age;
	char Address[100];
}STD;

Proqramda fərqli strukturlarda eyni quruluşdan istifadə etməyimiz lazım olduğunu düşünün. Bu vəziyyətdə hər dəfə tələbə quruluşunun quruluşunu təyin etməliyik.

quruluş tələbə std1, std2; // tələbə tipli dəyişən elan etmək

Bunun əvəzinə typedef ilə elan etsək, tələbə quruluşunu hər yerdə bütün strukturunu təyin etmədən elan edə bilərik.

typedef struct Student {
	int StdId;
	char StdName[100];
	int age;
	char Address[100];
}STD

 STD std1, std2; // tələbə tipli dəyişən elan etmək

İndi struktur dəyişənlərini elan etmək asandır. Yuxarıdakı vəziyyətdə tam 'struct Student std1, std2; 'tələbə std1 və std2 elan etmək. Bunun əvəzinə 'STD' özü bütün 'struct Student' deməkdir. Struktur elementlərinə girişdə heç bir fərq yoxdur. Burada yalnız fərq quruluş tipi dəyişən elan etməkdədir. Bu typedef istənilən növ dəyişən elan etmək üçün istifadə edilə bilər. Tutaq ki, sadə məlumat tiplərindən istifadə edərək elan edilmiş dəyişənlərimiz var. İstifadəçi adını başqa bir əlverişli adla dəyişdirmək istəyirsə, bunu typedef istifadə edərək edə bilər.


typedef imzasız int INT; // indi INT mövcud proqramda imzasız int tipli bir dəyişəni elan etmək üçün istifadə edilə bilər
INT intNum;

typedef üzmək SAL;
SAL pi;

Konvensiya və daha yaxşı başa düşmək üçün istifadəçi tərəfindən təyin edilmiş məlumat tiplərini təyin etmək üçün böyük hərf istifadə olunur. Eyni işi kiçikləşdirə bilərik. Lakin böyük hərf istifadəçiyə bir typedef məlumat növü olduğunu asanlıqla başa salır.

typedef üzmək üzür;
üzür pi;

#include 
typedef unsigned int INTEGER; // now INTEGER can be used to declare a variable of type unsigned int in the current program
typedef float FLOAT;

void main (){
    INTEGER intNum = 10;//user defined datatype INTEGER
    FLOAT pi = 3.14; //user defined datatype FLOAT

    printf("Integer value is : %d\n", intNum);
    printf("Float value is : %f", pi);
}

Preprocessor direktivi '#define' də oxşar funksiyanı təmin edir. Məlumat növünü istifadəçi üçün əlverişli bir şəkildə yenidən təyin etmək üçün də istifadə edilə bilər. Ancaq typedefdən az fərqlənir.

Şərh yaz

Translate »