Якщо дані є статичною або глобальною змінною, вона за замовчуванням заповнюється нулем, тому просто оголосіть її myStruct _m;
Якщо дані є локальною змінною або зоною, виділеною купою, очистіть їх memset
так:
memset(&m, 0, sizeof(myStruct));
Поточні компілятори (наприклад, останні версії gcc
) оптимізують це досить добре на практиці. Це працює лише в тому випадку, якщо всі нульові значення (включаючи нульові вказівники та нуль з плаваючою точкою) представлені як усі нульові біти, що вірно на всіх платформах, про які я знаю (але стандарт C дозволяє реалізувати, де це неправда; я не знаю такої реалізації) .
Ви можете, можливо, кодувати myStruct m = {};
або myStruct m = {0};
(навіть якщо перший член myStruct
не скалярний).
Я відчуваю, що використання memset
для локальних структур найкраще, і це краще передає той факт, що під час виконання потрібно щось робити (хоча зазвичай глобальні та статичні дані можна розуміти як ініціалізовані під час компіляції, без витрат на час виконання) .
= {};
Однак я не впевнений, що це дійсно.