Cách khai báo struct và typedef struct?

Cho mình hỏi, kiểu khai báo này

typedef struct NODE
{
    int Key;
    struct NODE *pNext;
} STACK;
STACK *p;

Và kiểu khai báo này

struct NODE
{
    int Key;
    NODE *pNext;
};
struct STACK
{
    NODE *top;
};

Có gì khác nhau không vậy?

3 Likes

Trong C++, nên dùng cách này

struct NODE
{
    int Key;
    NODE *pNext;
};
struct STACK
{
    NODE *top;
};

Trong C, nếu bạn lười thì có thể viết như thế này

typedef struct NODE
{
    int Key;
    struct NODE *pNext;
} STACK;
STACK *p; // STACK không cần phải có struct đứng trước trong trường hợp này, trong C

Bởi vì nếu bạn thực sự code C, bạn sẽ hiểu rằng bạn sẽ phải khai báo một struct NODE như sau

struct NODE
{
    int Key;
    struct NODE *pNext; // bạn phải thêm chữ struct trước chữ NODE
};

Trong C++, sử dụng typedef để định nghĩa một kiểu dữ liệu mới, sử dụng trong struct gần như là vô ích.

Em trong cái vụ khai báo struct chưa bao giờ dùng typedef, và thật sự cũng không muốn dùng. typedef struct về cơ bản chỉ là đổi tên cho nó thôi. Thế tại sao lại không đặt cho nó cái tên như ý mình ngay từ đầu?

P/s: Em thấy hồi đó em khai báo như này

struct Node {
        int key;
        Node* next; //không phải struct Node* next;
}

mà IDE vẫn chấp nhận và biên dịch được. Vậy là do IDE hiểu đc hay việc thêm chữ struct ở trước là không cần thiết a @ltd ?

1 Like

Còn tùy thuộc vào bạn dùng struct trong C hay C++. Nó khác nhau đó.

2 Likes

Nếu em code C++, đừng dùng typedef tràn lan vô tội vạ. Cách em đang làm là đúng.

struct Node {
        int key;
        Node* next; //không phải struct Node* next;
}

Khai báo thế này hợp lý, vì em đang code C++.

Là do em đang tạo project C++, không phải project C. Nếu em tạo project C nó sẽ báo lỗi ngay.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?