Cet avertissement vient du fichier nommé « cccp.c » dans gcc (à partir de la version 2.95, est-ce fichier de « la Russie soviétique »?), Et il ne peut pas être éteint. Il n'y a toujours pas d'option pour désactiver cet avertissement individuellement même en tête git, gcc/libcpp/macro.c file (ligne 2527 et line 2994 du même fichier)
Je citerai un peu les sources.
2525 /* Returns nonzero if a macro redefinition warning is required. */
2526 static bool
2527 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2528 const cpp_macro *macro2)
2529 {
...
2537 /* Suppress warnings for builtins that lack the NODE_WARN flag. */
..
2545 /* Redefinitions of conditional (context-sensitive) macros, on
2546 the other hand, must be allowed silently. */
...
2550 /* Redefinition of a macro is allowed if and only if the old and new
2551 definitions are the same. (6.10.3 paragraph 2). */
...
2561 /* Check parameter spellings. */
...
2566 /* Check the replacement text or tokens. */
...
2573 for (i = 0; i < macro1->count; i++)
2574 if (!_cpp_equiv_tokens (¯o1->exp.tokens[i], ¯o2->exp.tokens[i]))
2575 return true;
Dans votre cas, la fonction warn_of_redefinition
retournera true. Et voici une utilisation réelle:
2989 if (node->type == NT_MACRO)
2990 {
2991 if (CPP_OPTION (pfile, warn_unused_macros))
2992 _cpp_warn_if_unused_macro (pfile, node, NULL);
2993
2994 if (warn_of_redefinition (pfile, node, macro))
2995 {
2996 const int reason = (node->flags & NODE_BUILTIN)
2997 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
2998 bool warned;
2999
3000 warned = cpp_pedwarning_with_line (pfile, reason,
3001 pfile->directive_line, 0,
3002 "\"%s\" redefined",
3003 NODE_NAME (node));
3004
3005 if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3006 cpp_error_with_line (pfile, CPP_DL_NOTE,
3007 node->value.macro->line, 0,
3008 "this is the location of the previous definition");
3009 }
3010 }
Donc, il n'y a pas d'option spécifique. Et la réponse de Greg est bonne pour ce cas, il vous suffit de ne pas définir votre chaîne vide juste avant la redéfinition.
Vous pouvez utiliser '-Wp, -w' pour désactiver [avertissements préprocesseur] (http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#Invocation) – osgx
Cet avertissement provient de la Russie soviétique fichier nommé "cccp.c" dans gcc (à partir de la version 2.95), et il ne peut pas être désactivé. Il n'y a toujours pas d'option pour désactiver cet avertissement individuellement [même dans git head, gcc/libcpp/macro.c] (http://gcc.gnu.org/git/?p=gcc.git;a=blob;f= libcpp/macro.c; h = f3139590d5045b128709296d1abbb81753284f10; hb = HEAD # l2527) (et la ligne 2994 du même fichier) – osgx
@osgx si vous faites de ce commentaire une réponse, je voudrais l'accepter. –