Chcę zainicjować wszystkich członków struct 0. wspólnego rozwiązania jest to, aby coś takiego:członków zainicjować struct do 0 (gcc -Wextra)
struct foo bar = {0}
tworzę ten przykład:
#include <stdio.h>
struct Stru2 {
int c;
int d;
};
struct Stru1 {
int a;
Stru2 b;
};
int main()
{
struct Stru1 aaa = { 0 };
return aaa.b.c;
}
I skompilować (gcc 4.6.3) to odrobina to parametry, aby upewnić się, jak sobie z tym poradzić ANSI
gcc -Wall -Wextra -pedantic -ansi main.cpp
I mam następujące ostrzeżenia:
main.cpp: In function ‘int main()’:
main.cpp:36:28: warning: missing initializer for member ‘Stru1::b’ [-Wmissing-field-initializers]
Pytanie brzmi, dlaczego -Wextra, generuje to ostrzeżenie? Może nie zawsze "= {0}", ustawić wszystkich członków na 0?
Czy generuje również ostrzeżenie po zainicjowaniu za pomocą '{}'? (To byłaby bardziej idiomatyczna forma, jak sądzę.) –
Dlaczego po prostu nie używać memsetu? –
@JamesKanze: inicjalizacja '{}' jest nieprawidłowa C. – pmg