[Kos-dev] Re: [Kos-bug] gcc 3.3

Thomas Petazzoni kos-dev@enix.org
Mon, 26 May 2003 09:30:08 +0200


This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigF4D5A44FB739B5A84DD21350
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Bonjour,

> AMHA, il faudrait le laisser, meme si ca fait des warnings, parce que ca
> compile quand meme, et que si les warnings n'y sont plus, vous allez
> peut-etre plus penser a ca si ca cause des problemes

Oui, mais on s'en fiche un peu de savoir si Gcc a réussi à inliner une
fonction ou pas. On place le mot clé "inline" devant certaines fonctions
 pour lui signifier que si il y arrive, ça serait bien qu'il les inline,
mais on s'en fiche de savoir si dans les faits il a réussi à le faire
(l'inlinage n'est pas possible dans tous les cas).

Pour ceux qui veulent découvrir une bête bizarre avec Gcc : les nested
functions, c'est vraiment impressionnant. On peut déclarer une fonction
à l'intérieur d'une fonction, et depuis la nested function on peut
accéder aux variables locales de la fonction englobante, même si l'appel
vient de l'extérieur de la fonction englobante (par exemple si la
fonction englobante a passé un pointeur sur la nested function en
paramètre à une autre function). Bluffant!

> 
> | * gcc 3.3 signale quand il y a un label juste avant une fin de bloc. Par
> | exemple :
> | pmm_init.c: In function `pmm_init':
> | pmm_init.c:115: warning: deprecated use of label at end of compound
> | statement
> |   do {
> |        ...
> |     retry:
> |     }
> |   while (min < 0xffffffff);
> | On peut remplacer le goto retry par un :
> |  if(min < 0xffffffff)
> |   continue;
> |  else
> |   break;
> | Mais bon, ce n'est pas terrible non plus.
> 
> Ton deuxieme petit bout de code ne correspond au premier que si retry
> est juste apres ton while, ou dans ce cas un break suffit ...

Quand on fait goto retry, ça veut dire qu'on veut recommencer la boucle
seulement si la condition est vérifiée (min < 0xffffffff). Il me semble
donc que le bout de code
*************************
if(min < 0xffffffff)
 continue; /* La condition est vérifiée -> on repart au début de la
boucle (au niveau du do { ) */
else
 break; /* La condition n'est pas vérifiée -> on sort de la boucle */
*************************
est correct


Thomas

PS : Le caractère à placer devant les lignes auxquelles tu réponds est
'>' et non '|'.
-- 
PETAZZONI Thomas - thomas DOT petazzoni AT enix DOT org - UIN : 34937744
Web: http://www.enix.org/~thomas/
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7

--------------enigF4D5A44FB739B5A84DD21350
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+0cKA9lPLMJjT96cRAv6yAKCu9z7EQCqf8SEpdZeOC4iU+10C4gCgpi8p
ShGTT7YbvqPRXa11JUg4Rgk=
=kHZT
-----END PGP SIGNATURE-----

--------------enigF4D5A44FB739B5A84DD21350--