91 votes

Inutilisés paramètre en c++11

En c++03 et plus tôt pour désactiver l'avertissement du compilateur sur inutilisé paramètre habituellement, j'utilise ce code:

#define UNUSED(expr) do { (void)(expr); } while (0)

Par exemple

int main(int argc, char *argv[])
{
    UNUSED(argc);
    UNUSED(argv);

    return 0;
}

Mais les macros ne sont pas les meilleures pratiques pour le c++, donc. N'importe quelle meilleure solution apparaissent avec c++11? Je veux me débarrasser de macros?

Merci pour tout!

Edit2: MadScientist suggéré bonne solution

template <typename T>
void ignore(T &&)
{ }

Solution de Xeo pour plusieurs paramètres

template<class... T> void unused(T&&...)
{ }

219voto

Henrik Points 16565

Vous pouvez simplement omettre les noms de paramètre:

int main(int, char *[])
{

    return 0;
}

Et dans le cas de la main, vous pouvez omettre les paramètres:

int main()
{
    // no return implies return 0;
}

Voir "§ 3.6 de Début et de fin" dans le C++11.

47voto

MadScientist Points 1450

J'ai utilisé une fonction dont le corps est vide à cette fin:

template <typename T>
void ignore(T &&)
{ }

void f(int a, int b)
{
  ignore(a);
  ignore(b);
  return;
}

Je m'attendre à des graves compilateur d'optimiser l'appel de la fonction et des silences mises en garde pour moi.

44voto

Nikko Points 2009

Pour "désactiver" cet avertissement, le mieux est d'éviter l'écriture de l'argument, il suffit d'écrire le type.

void function( int, int )
{
}

ou si vous préférez, en commentaire:

void function( int /*a*/, int /*b*/ )
{
}

Vous pouvez mélanger nommé et sans nom d'arguments:

void function( int a, int /*b*/ )
{
}

29voto

Rien d'équivalent, pas de.

Donc, vous êtes coincé avec la même vieille options. Êtes-vous heureux d'omettre les noms dans la liste des paramètres entièrement?

int main(int, char**)

Dans le cas spécifique de l' main, bien sûr, vous pourriez tout simplement omettre les paramètres eux-mêmes:

int main()

Il y a aussi les typiques de la mise en œuvre spécifique de trucs, comme de GCC __attribute__((unused)).

14voto

Mats Petersson Points 70074

Les Macros peuvent ne pas être idéal, mais ils font un bon travail pour cet usage particulier. Je dirais bâton à l'aide de la macro.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X