Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment obtenir un warning pour i=i ?

4 réponses
Avatar
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 ?

4 réponses

Avatar
Pascal Bourguignon
cedric cellier writes:

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.

Avatar
Thierry Boudet
On 2006-12-08, Pascal Bourguignon wrote:

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 }--


Avatar
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?

Vincent Guichard

Avatar
Pascal Bourguignon
Vincent Guichard writes:

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.