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