JavaScript is required

Trong các khai báo sau, khai báo nào không đúng?

A.

struct Date { int ngay, thang, nam; };

B.

struct { int ngay, thang, nam; } D1, D2;

C.

typedef struct { int ngay, thang, nam; } Date;

D.
struct Date { long int ngay:7; long int thang:6; long int nam:5; };
Trả lời:

Đáp án đúng: D


Đáp án D sai. Trong C/C++, khi khai báo cấu trúc (struct) với các trường bit (bit fields), tổng số bit của các trường bit không được vượt quá kích thước của kiểu dữ liệu cơ sở (ở đây là long int). Trong trường hợp này, 7 (ngày) + 6 (tháng) + 5 (năm) = 18 bit, nhỏ hơn kích thước thông thường của long int (thường là 32 hoặc 64 bit) nên về mặt kỹ thuật, khai báo này có thể hợp lệ trên một số trình biên dịch. Tuy nhiên, việc sử dụng long int cho các trường bit nhỏ như vậy là không hiệu quả về mặt bộ nhớ. Tuy nhiên, cú pháp này vẫn có thể được chấp nhận.

Đáp án A, B, C đều đúng:

  • A: Khai báo một cấu trúc Date với các thành phần ngày, tháng, năm.
  • B: Khai báo trực tiếp hai biến D1, D2 kiểu cấu trúc ẩn danh (không có tên cấu trúc).
  • C: Sử dụng typedef để định nghĩa Date là một kiểu dữ liệu tương đương với cấu trúc có các thành phần ngày, tháng, năm.

Tuy nhiên, câu hỏi yêu cầu tìm khai báo *không đúng*, và trong 4 đáp án thì không có đáp án nào sai hoàn toàn về mặt cú pháp. Vì vậy, câu hỏi này không có đáp án chính xác nhất.

Câu hỏi liên quan