Мне интересно, почему я получаю предупреждение об инициализации в одном случае, но не в другом. Код находится в исходном файле на C++ и с использованием GCC 4.7 с -std=c++11
.Почему я получаю предупреждение: отсутствует инициализатор для члена? [-Wmissing-field-initializers]
struct sigaction old_handler, new_handler;
выше производит НЕТ предупреждения с -Wall
и -Wextra
.
struct sigaction old_handler={}, new_handler={};
struct sigaction old_handler={0}, new_handler={0};
выше производит предупреждения:
warning: missing initializer for member ‘sigaction::__sigaction_handler’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_mask’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_flags’ [-Wmissing-field-initializers]
warning: missing initializer for member ‘sigaction::sa_restorer’ [-Wmissing-field-initializers]
Я прочитал How should I properly initialize a C struct from C++?, Why is the compiler throwing this warning: "missing initializer"? Isn't the structure initialized?, и сообщения об ошибках, как http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750. Я не понимаю, почему неинициализированная структура не генерирует предупреждение, а инициализированная структура - это, генерирующая предупреждение.
Почему неинициализированные структуры не создает предупреждение; и почему инициализированные структуры генерируют предупреждение?
То, что вы называете инициализированным, только частично инициализировано, поэтому предупреждение. –