พื้นฐานแล้ว struct ใช้เพื่อกำหนดโครงสร้าง (structure) ใน C หากต้องการใช้ ต้องเขียนคีย์เวิร์ด struct นำหน้าชื่อโครงสร้างทุกครั้ง หากใช้ typedef จะตั้งชื่อใหม่ได้ ใช้ชื่อนั้นโดยไม่ต้องเขียน struct
// C style
struct Point { int x, y; };
struct Point p1; // ต้องเขียน struct
typedef struct Point Point_t;
Point_t p2; // ไม่ต้องเขียน struct
ใน C++
ไม่มีความแตกต่าง ระหว่าง struct และ typedef struct เพราะใน C++ ทุก struct/union/enum/class declaration จะทำงานเหมือนมี typedef อยู่แล้ว (implicit typedef) ตราบใดที่ชื่อไม่ถูกบังโดย declaration อื่นที่มีชื่อเดียวกัน
// C++ style
struct Point { int x, y; };
Point p1; // OK ใน C++ ไม่ต้องเขียน struct
Point p2; // เหมือน typedef แล้ว
ข้อแตกต่างเล็กน้อย (Subtle Difference)
typedef ไม่สามารถ forward declare ได้ (ไม่สามารถ `typedef struct Foo Foo_t;` แล้วค่อย define `struct Foo` ภายหลังได้) ดังนั้นสำหรับ typedef option ต้อง include ไฟล์ที่มี typedef ก่อนใช้งานทุกครั้ง
แนวทางปฏิบัติใน C++ ทันสมัย: ใช้ struct Name { ... }; โดยตรง ไม่ต้อง typedef ชื่อใหม่ ชื่อโครงสร้างใช้ได้ทันที