OVH Cloud OVH Cloud

Parameter x is never used

23 réponses
Avatar
Fabien LE LEZ
Bonjour,

J'ai une fonction, en cours de création, qui ressemble à ça :

bool f (std::string const& x)
{
return true;
}

Bien évidemment, mon compilo râle parce que le paramètre "x" n'est pas
utilisé. Histoire de le faire taire pendant que je réfléchis à
l'implémentation réelle de la fonction, je tente ceci :

bool f (std::string const& x)
{
return x, true;
}

Et là, il râle toujours... alors qu'avec ceci :

bool f (std::string const& x)
{
x;
return true;
}

il ne râle plus (et considère donc que "x" est utilisé).

Bon, c'est pas une affaire d'état, et j'imagine que c'est encore une
bizarrerie de mon compilo, mais si jamais quelqu'un sait pourquoi en
voyant "return x, true;" il ne réagit pas de la même façon qu'en
voyant "x; return true;"...

Merci d'avance ;-)


--
schtroumpf schtroumpf

10 réponses

1 2 3
Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| Bonjour,
|
| J'ai une fonction, en cours de création, qui ressemble à ça :
|
| bool f (std::string const& x)
| {
| return true;
| }
|
| Bien évidemment, mon compilo râle parce que le paramètre "x" n'est pas
| utilisé. Histoire de le faire taire pendant que je réfléchis à
| l'implémentation réelle de la fonction, je tente ceci :

En C++, tu peux simplement dire

bool f(const std::string&) { return true; }

i.e., tu n'es pas obligé de nommer un paramètre si tu ne t'en sers
pas. (Ce n'est évidemment pas le cas en C).

[...]

| Bon, c'est pas une affaire d'état, et j'imagine que c'est encore une
| bizarrerie de mon compilo, mais si jamais quelqu'un sait pourquoi en
| voyant "return x, true;" il ne réagit pas de la même façon qu'en
| voyant "x; return true;"...

Peut-être que l'optimiseur n'est pas encore assez avancé ? :-)

-- Gaby
Avatar
Loïc Joly
Fabien LE LEZ wrote:
Bonjour,

J'ai une fonction, en cours de création, qui ressemble à ça :

bool f (std::string const& x)
{
return true;
}

Bien évidemment, mon compilo râle parce que le paramètre "x" n'est pas
utilisé.


Souvent, si tu écris
bool f (std::string const& )
{
return true;
}

Les compilos ne font plus de warning.

--
Loïc

Avatar
Fabien LE LEZ
On Wed, 23 Jun 2004 08:02:24 +0200, Loïc Joly
:

Souvent, si tu écris
bool f (std::string const& )
Les compilos ne font plus de warning.


Je sais. Mais j'ai gardé le nom du paramètre parce que je savais en
avoir besoin quand j'ai écrit l'implémentation réelle.


--
schtroumpf schtroumpf

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

Bonjour,

J'ai une fonction, en cours de création, qui ressemble à ça :

bool f (std::string const& x)
{
return true;
}

Bien évidemment, mon compilo râle parce que le paramètre "x" n'est pas
utilisé. Histoire de le faire taire pendant que je réfléchis à
l'implémentation réelle de la fonction, je tente ceci :


La maniere normale en C++, c'est de ne pas donner de nom au parametre.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
PurL
return x, true;


Désolé de mon intervention sans rapport avec la question, mais je voulais
juste comprendre le sens de l'instruction ci-dessus car je ne l'ai jamais
rencontré.

Merci,

PurL

Avatar
Alain Migeon
In article <cbb6ct$mvf$,
says...
Souvent, si tu écris
bool f (std::string const& )
{
return true;
}

Les compilos ne font plus de warning.


Avec Visual C++ 6, le compilo ne fait pas de warning si le niveau de
warning est 3, mais en fera un si le niveau de warning est 4.

_______________________________
Alain Migeon
Software engineer - Rovsing Dynamics - Skovlunde - Denmark
Please reverse dk and rovsing for replying

Avatar
Aurélien REGAT-BARREL
Désolé de mon intervention sans rapport avec la question, mais je voulais
juste comprendre le sens de l'instruction ci-dessus car je ne l'ai jamais
rencontré.


Moi non plus je n'ai jamais vu ça.
Pour virer le warning en voulant garder le nom du paramètre (pour plus
tard), il me semble que la manière simple et portable est :

bool f (std::string const& x)
{
(void) x;
return true;
}


--
Aurélien REGAT-BARREL

Avatar
Vincent Guichard

return x, true;



Désolé de mon intervention sans rapport avec la question, mais je voulais
juste comprendre le sens de l'instruction ci-dessus car je ne l'ai jamais
rencontré.


La virgule (,) est un opérateur de séquencement qui est évalué de gauche
à droite. Dans l'expression "x, true" , le compilateur évalue d'abord
"x", puis "true" qui est alors passé au return. Le résultat de "x" est
perdu,mais on a l'assurance (?) que l'évaluation de "x" a bien été
effectuée et que tous ses effets de bordon été résolus avant
l'évaluation de "true".

Vincent Guichard


Avatar
Fabien LE LEZ
On Wed, 23 Jun 2004 08:58:00 +0200, "PurL" :

return x, true;


Désolé de mon intervention sans rapport avec la question, mais je voulais
juste comprendre le sens de l'instruction ci-dessus car je ne l'ai jamais
rencontré.


"a, b" évalue a et b (dans ce sens, je crois), et renvoie b.

Exemple :

int f()
{
cout << "f" << endl;
return 1;
}

int g()
{
cout << "g" << endl;
return 2;
}

int h()
{
return f(),g();
}

int main()
{
cout << h() << endl;
}

affichera :

f
g
2


--
schtroumpf schtroumpf


Avatar
Aurélien Regat-Barrel
Ca explique ce drôle de code que je viens de découvrir ailleurs :
void ma_fonction( int p );
ma_fonction( (1, 2, 3) );
En fait c'est une erreur mais je me demandais pourquoi ça compilais et ce
que ça voulais dire.
Merci.

--
Aurélien REGAT-BARREL
1 2 3