avertissement gcc “‘sera initialisé après”

Je reçois beaucoup de ces avertissements du code tiers que je ne peux pas modifier. Est-il possible de désactiver cet avertissement ou au moins de le désactiver pour certaines zones (comme #pragma push / pop dans VC ++)?

Exemple:

list.h:1122: warning: `list<LogOutput*, allocator >::node_alloc_' will be initialized after list.h:1117: warning: `allocator list<LogOutput*, allocator >::alloc_' 

Assurez-vous que les membres apparaissent dans la liste d’initialisation dans le même ordre qu’ils apparaissent dans la classe

 Class C { int a; int b; C():b(1),a(2){} //warning, should be C():a(2),b(1) } 

ou vous pouvez tourner -Wno-reorder

Vous pouvez le désactiver avec -Wno-reorder .

Pour ceux qui utilisent QT ayant cette erreur, ajoutez ceci au fichier .pro

 QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder 

utilisez -Wno-reorder (man gcc est votre ami :))

Si vous constatez des erreurs dans les en-têtes de bibliothèque et que vous utilisez GCC, vous pouvez désactiver les avertissements en incluant les en-têtes à l’aide de l’ -isystem au lieu de -I .

Des caractéristiques similaires existent dans le clang .

Si vous utilisez CMake, vous pouvez spécifier SYSTEM pour include_directories .

L’ordre d’initialisation importe peu. Tous les champs sont initialisés dans l’ordre de leur définition dans leur classe / struct. Mais si l’ordre dans la liste d’initialisation est différent, gcc / g ++ génère cet avertissement. Modifiez uniquement l’ordre d’initialisation pour éviter cet avertissement. Mais vous ne pouvez pas définir de champ en utilisant l’initialisation avant sa construction. Ce sera une erreur d’exécution. Donc, vous changez l’ordre de définition. Soyez prudent et attention!