Если данные являются статической или глобальной переменной, по умолчанию они заполняются нулями, поэтому просто объявите их. myStruct _m;
Если данные являются локальной переменной или зоной, выделенной кучей, очистите их, memset
например:
memset(&m, 0, sizeof(myStruct));
Текущие компиляторы (например, последние версии gcc
) достаточно хорошо оптимизируют это на практике. Это работает, только если все нулевые значения (включая нулевые указатели и ноль с плавающей запятой) представлены как все нулевые биты, что верно для всех платформ, о которых я знаю (но C стандарт разрешает реализации, где это ложно; я не знаю такой реализации) .
Возможно, вы могли бы написать код myStruct m = {};
или myStruct m = {0};
(даже если первый член myStruct
не является скаляром).
Я считаю, что использование memset
локальных структур - лучший вариант, и он лучше передает тот факт, что во время выполнения что-то должно быть сделано (хотя обычно глобальные и статические данные можно понимать как инициализированные во время компиляции, без каких-либо затрат во время выполнения) .
= {};
однако я не уверен, действительно ли это.