Comment obtenir un warning pour i=i ?

Le
cedric cellier
Bonjour !

Voici :

void toto(int i)
{
i = i;
}

$ gcc --version
gcc (GCC) 4.1.2 20061028 (prerelease) (Debian 4.1.1-19)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

$ gcc -Wall -Wextra -c toto.c
$

Pas de warning ?
Je suis sur que GCC est capable dans certains cas de prévenir qu'une
expression n'a pas d'effet. Pourquoi n'y arrive t-il pas dans ce cas ?
Y a t-il un flag supplémentaire qui activerait ce warning ?
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Pascal Bourguignon
Le #975345
cedric cellier
Bonjour !

Voici :

void toto(int i)
{
i = i;
}

$ gcc --version
gcc (GCC) 4.1.2 20061028 (prerelease) (Debian 4.1.1-19)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

$ gcc -Wall -Wextra -c toto.c
$

Pas de warning ?
Je suis sur que GCC est capable dans certains cas de prévenir qu'une
expression n'a pas d'effet. Pourquoi n'y arrive t-il pas dans ce cas ?
Y a t-il un flag supplémentaire qui activerait ce warning ?


C'est que l'idiome i=i; est justement utilisé pour neutraliser un
autre warning, celui d'une variable non utilisée!

On pourrait ajouter au makefile a grep pour signaler ces instructions
inutiles. Quelque chose comme:

.o.c:
-grep -n -e '(^|[;}]) *([_A-Za-z][_A-Za-z0-9]*) *= *1 *;' $< /dev/null
$(CC) $(CFLAGS) -c -o $@ $<

--
__Pascal Bourguignon__ http://www.informatimago.com/
In deep sleep hear sound,
Cat vomit hairball somewhere.
Will find in morning.

Thierry Boudet
Le #975344
On 2006-12-08, Pascal Bourguignon

void toto(int i)
{
i = i;
}

$ gcc -Wall -Wextra -c toto.c
$

Pas de warning ?
Je suis sur que GCC est capable dans certains cas de prévenir qu'une
expression n'a pas d'effet. Pourquoi n'y arrive t-il pas dans ce cas ?
Y a t-il un flag supplémentaire qui activerait ce warning ?



Moi aussi, il me semble bien avoir vu passer un warning du
genre "statement have no effect". Mais je confond peut-être
avec un lint...


--
Quels indicateurs devrait-on mesurer pour tenter de déterminer un
"indice de viscosité" raisonnable par rapport à la fréquentation
moyenne de usenet-fr, ou -si du moins c'est pertinent- à celle de fufe ?
--{ mécanique des fufluides }--


Vincent Guichard
Le #975342
C'est que l'idiome i=i; est justement utilisé pour neutraliser un
autre warning, celui d'une variable non utilisée!


Il me semblait que c'était (void) i; qui était conseillé dans ce cas.
Une des deux méthodes est-elle préconisée?

Vincent Guichard

Pascal Bourguignon
Le #975180
Vincent Guichard
C'est que l'idiome i=i; est justement utilisé pour neutraliser un
autre warning, celui d'une variable non utilisée!


Il me semblait que c'était (void) i; qui était conseillé dans ce
cas. Une des deux méthodes est-elle préconisée?


Oui, sur les compilateurs pas trop vieux, (void)i; est surement meilleur.

--
__Pascal Bourguignon__ http://www.informatimago.com/

THIS IS A 100% MATTER PRODUCT: In the unlikely event that this
merchandise should contact antimatter in any form, a catastrophic
explosion will result.


Poster une réponse
Anonyme