Khai báo/định nghĩa của Enum và Struct có chiếm vùng nhớ không?

Anh/chị cho em hỏi, giả sử nếu mình khai báo 1 STRUCT hay 1 ENUM, nhưng trong hàm main không sử dụng gì liên quan tới nó thì compiler có cấp phát cho nó vùng nhớ hay không (cái struct/ enum đó có chiếm không gian trong vùng nhớ không)?

Em có search trên stackoverflow thì nhận được câu trả lời như vầy nhưng vẫn chưa hiểu lắm.
Mong anh/chị giải thích giúp!

Struct thì nó như một cái khuôn để compiler đúc một “object” khi mình sử dụng cái “object” đó.
=> Nếu không xài thì không cấp phát.

Còn enums, nó như là tên giả cho những giá trị để người đọc dễ hiểu hơn. như

enum HTTP_STATUS{
 SUCCESS = 200,
 BAD_REQUEST=400,
 NOT_FOUND = 404,
}

if (httpStatus == SUCCESS) {
 return "ok";
}

So với

if (httpStatus == 200) {
 return "ok";
}

thì dễ thấy cái đầu tiên dễ hiểu hơn.

Tuy nhiên cái hay của Enum là gom nó thành 1 các giá trị + tên giả thành danh sách và biến nó thành 1 như “kiểu”. Điều này giúp bạn truyền những giá trị không nằm trong danh sách này sẽ bị báo lỗi ngay.

enum HTTP_STATUS {
 SUCCESS = 200,
 BAD_REQUEST=400,
 NOT_FOUND = 404,
};

enum WEEK_DAY {
 MONDAY,
 TUESDAY,
};

typedef enum HTTP_STATUS HttpStatus;

int main() {
    HttpStatus a = MONDAY; // lỗi nè :3 
}

=> Compiler sẽ không cấp vùng nhớ cho nó. Vì SUCCESS hay MONDAY khi dịch ra thì những con số như này thôi.

if (httpStatus == 200) { // khi biên dịch ra trình biên dịch sẽ thay SUCCESS = 200
 return "ok";
}
8 Likes

Vậy còn biến a có được cấp vùng nhớ không ạ?

Khi này thì có, và nó là kiểu int/long tùy vào giá trị của 1 biến trong enum

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