typedef
เป็นโครงสร้างภาษาที่เชื่อมโยงชื่อกับประเภท
คุณใช้แบบเดียวกับที่คุณใช้กับชนิดดั้งเดิมตัวอย่างเช่น
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
ใช้พวกเขาเช่น
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
ที่คุณสามารถดูคุณก็สามารถใช้ทดแทนtypedefedชื่อที่มีความหมายที่กำหนดข้างต้น
ปัญหาอยู่ที่ตัวชี้ไปยังฟังก์ชันไวยากรณ์และความสามารถในการอ่านใน C และ C ++ และtypedef
สามารถปรับปรุงความสามารถในการอ่านของการประกาศดังกล่าว อย่างไรก็ตามไวยากรณ์มีความเหมาะสมเนื่องจากฟังก์ชั่น - แตกต่างจากประเภทที่เรียบง่ายอื่น ๆ อาจมีค่าตอบแทนและพารามิเตอร์ดังนั้นบางครั้งการประกาศที่มีความยาวและซับซ้อนของตัวชี้ไปยังฟังก์ชั่น
ความสามารถในการอ่านอาจเริ่มมีความยุ่งยากกับตัวชี้ไปยังฟังก์ชันอาร์เรย์และรสชาติอื่น ๆ
เพื่อตอบคำถามสามข้อของคุณ
ทำไมต้องใช้ typedef
เพื่อความสะดวกในการอ่านรหัส - โดยเฉพาะอย่างยิ่งสำหรับตัวชี้ไปยังฟังก์ชั่นหรือชื่อโครงสร้าง
ไวยากรณ์ดูแปลก (ในตัวชี้ไปยังฟังก์ชันการประกาศ)
ไวยากรณ์นั้นไม่ชัดเจนในการอ่านอย่างน้อยเมื่อเริ่มต้น การใช้การtypedef
ประกาศแทนทำให้การอ่านง่ายขึ้น
ตัวชี้ฟังก์ชั่นถูกสร้างขึ้นเพื่อเก็บที่อยู่หน่วยความจำของฟังก์ชั่นหรือไม่?
ใช่ตัวชี้ฟังก์ชั่นเก็บที่อยู่ของฟังก์ชั่น สิ่งนี้ไม่เกี่ยวกับสิ่งtypedef
ก่อสร้างที่ทำให้การเขียน / อ่านโปรแกรมง่ายขึ้นเท่านั้น คอมไพเลอร์เพิ่งขยายนิยาม typedef ก่อนที่จะรวบรวมรหัสจริง
ตัวอย่าง:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456