Pourquoi je reçois le message “warning: missing initialiseur de membre”? [-Wmissing-champ-des initialiseurs]

Je me demande pourquoi je reçois un avertissement au sujet de l'initialisation dans un cas mais pas dans l'autre. Le code est dans un fichier source C++, et en utilisant GCC 4.7 avec -std=c++11.


struct sigaction old_handler, new_handler;

Ci-dessus produit PAS avertissements avec -Wall et -Wextra.


struct sigaction old_handler={}, new_handler={};
struct sigaction old_handler={0}, new_handler={0};

Ci-dessus produit des avertissements:

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]

J'ai lu à travers Comment dois-je initialiser correctement un C struct en C++?, Pourquoi le compilateur de lancer cet avertissement: "manque d'initialiseur"? N'est-ce pas la structure initialisée?, et les rapports de bug comme http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750. Je ne comprends pas pourquoi les non initialisée struct n'est pas générer un avertissement, alors que la initialisée struct est générer un avertissement.

Pourquoi le non initialisée les structures de ne pas générer un avertissement; et pourquoi est initialisé les structures générer un avertissement?

InformationsquelleAutor jww | 2014-02-09