static struct fuse_oprations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
ฉันไม่เข้าใจไวยากรณ์ C นี้ดี ฉันค้นหาไม่ได้ด้วยซ้ำเพราะฉันไม่รู้ชื่อไวยากรณ์ นั่นอะไร?
static struct fuse_oprations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
ฉันไม่เข้าใจไวยากรณ์ C นี้ดี ฉันค้นหาไม่ได้ด้วยซ้ำเพราะฉันไม่รู้ชื่อไวยากรณ์ นั่นอะไร?
คำตอบ:
นี่คือคุณลักษณะ C99 ที่ให้คุณตั้งค่าฟิลด์เฉพาะของโครงสร้างตามชื่อในตัวเริ่มต้น ก่อนหน้านี้ตัวเริ่มต้นจำเป็นต้องมีเฉพาะค่าสำหรับทุกฟิลด์ตามลำดับซึ่งยังคงใช้งานได้แน่นอน
ดังนั้นสำหรับโครงสร้างต่อไปนี้:
struct demo_s {
int first;
int second;
int third;
};
...คุณสามารถใช้ได้
struct demo_s demo = { 1, 2, 3 };
...หรือ:
struct demo_s demo = { .first = 1, .second = 2, .third = 3 };
...หรือแม้กระทั่ง:
struct demo_s demo = { .first = 1, .third = 3, .second = 2 };
... แม้ว่าสองรายการสุดท้ายเป็นของ C99 เท่านั้น
struct demo_s demo = { .first = 1, .first = 9 };
ที่หนึ่งของ GCC ของฉันนี้จะรวบรวมโดยไม่มีการเตือนและเป็นครั้งแรกจะเป็น 9
เหล่านี้เป็น C99 ของinitializers กำหนด
เรียกว่าdesignated initialisation
(ดูตัวเริ่มต้นที่กำหนด ) "initializer-list", Each ' .
' คือ " designator
" ซึ่งในกรณีนี้จะตั้งชื่อสมาชิกเฉพาะของโครงสร้าง ' fuse_oprations
' เพื่อเริ่มต้นสำหรับอ็อบเจ็กต์ที่กำหนดโดยhello_oper
ตัวระบุ ''
ไวยากรณ์ทั้งหมดเรียกว่า initializer ที่กำหนดตามที่ COD3BOY กล่าวไว้แล้วและจะใช้โดยทั่วไปเมื่อคุณต้องการเริ่มต้นโครงสร้างของคุณในเวลาที่ประกาศเป็นค่าเฉพาะหรือค่าเริ่มต้นบางค่า