Nếu dữ liệu là một biến tĩnh hoặc toàn cục, nó được điền bằng 0 theo mặc định, vì vậy chỉ cần khai báo myStruct _m;
Nếu dữ liệu là một biến cục bộ hoặc một vùng được phân bổ theo heap, hãy xóa dữ liệu đó bằng cách memset
:
memset(&m, 0, sizeof(myStruct));
Các trình biên dịch hiện tại (ví dụ như các phiên bản gần đây của gcc
) tối ưu hóa điều đó khá tốt trong thực tế. Điều này chỉ hoạt động nếu tất cả các giá trị 0 (bao gồm con trỏ rỗng và dấu phẩy động không) được biểu diễn dưới dạng tất cả các bit 0, điều này đúng trên tất cả các nền tảng mà tôi biết (nhưng tiêu chuẩn C cho phép triển khai trong đó điều này là sai; tôi không biết cách triển khai như vậy) .
Bạn có thể mã myStruct m = {};
hoặc myStruct m = {0};
(ngay cả khi thành viên đầu tiên của myStruct
không phải là một vô hướng).
Cảm giác của tôi là sử dụng memset
cho các cấu trúc cục bộ là tốt nhất và nó truyền đạt tốt hơn thực tế là trong thời gian chạy, một cái gì đó phải được thực hiện (trong khi thông thường, dữ liệu toàn cục và tĩnh có thể được hiểu là được khởi tạo tại thời điểm biên dịch, mà không có bất kỳ chi phí nào trong thời gian chạy) .
= {};
Tuy nhiên tôi không chắc liệu điều này có hợp lệ hay không.