Se os dados forem uma variável estática ou global, eles são preenchidos com zero por padrão, então apenas declare-os myStruct _m;
Se os dados forem uma variável local ou uma zona alocada no heap, limpe-os com memset
:
memset(&m, 0, sizeof(myStruct));
Os compiladores atuais (por exemplo, versões recentes de gcc
) otimizam isso muito bem na prática. Isso funciona apenas se todos os valores zero (incluindo ponteiros nulos e zero de ponto flutuante) forem representados como todos os bits zero, o que é verdadeiro em todas as plataformas que conheço (mas o padrão C permite implementações onde isso é falso; não conheço essa implementação) .
Você poderia talvez codificar myStruct m = {};
ou myStruct m = {0};
(mesmo se o primeiro membro de myStruct
não for um escalar).
Meu sentimento é que usar memset
para estruturas locais é o melhor, e transmite melhor o fato de que em tempo de execução, algo deve ser feito (enquanto normalmente, dados globais e estáticos podem ser entendidos como inicializados em tempo de compilação, sem nenhum custo em tempo de execução) .
= {};
No entanto, não tenho certeza se isso é válido.