1

Voici deux exemples de code bugués. Dans les deux cas, DevC++ ne me met aucun warning (je suis en mode -Wall -Wextra).

}
1.int x = 1;
   
{
    int x = x + 1;
    printf("%d\n", x);

Piège : on ne peut pas déclarer une nouvelle variable locale ayant le même nom qu'une variable globale, en utilisant une déclaration qui fait appel à cette variable globale. Pas de warning pour dire que la définition locale de x est invalide ou (au pire) que x est utilisé sans être initialisé.

}
2.int i;

for (i = 0; i < 2; i++)
{
    int x;
    
    if (i == 0) x = 1;
    if (i == 1) printf("%d\n", x);
Piège : la durée de vie de x est limitée au parcours en cours de la boucle, donc rien ne garantit que x = 1 quand i = 1. Pas de warning non plus pour la non-initialisation de x dans ce cas.

Bon, je sais que la version de GCC utilisée dans DevC++ commence à dater.

Qu'est-ce-que ça donne avec votre compilo préféré (GCC plus récent, VC++, autre...) ?
Qu'en pensez-vous ? J'en demande trop au compilateur ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2

1. -Wself-init
2. Tu compiles bien avec optimisation? Les avertissements sur la non-initialisation ne fonctionnent que si on optimise.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Merci.

1. Effectivement (sauf que ça s'appelle -Winit-self dans les versions actuelles de GCC, apparemment).
2. Exact, une fois l'optimisation activée, GCC génère bien un warning dans les 2 cas. Je ne savais pas qu'il y avait un lien entre ces 2 options.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

edit: non rien
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

Zerosquare (./3) :
1. Effectivement (sauf que ça s'appelle -Winit-self dans les versions actuelles de GCC, apparemment).

Probablement dans toutes les versions, je ne me rappelais juste pas du bon nom. grin
2. Exact, une fois l'optimisation activée, GCC génère bien un warning dans les 2 cas. Je ne savais pas qu'il y avait un lien entre ces 2 options.

C'est l'optimiseur qui détecte que tu utilises quelque chose sans l'initialiser.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Il n'y a pas un warning du genre -Wshadow qui réagirait à ce genre de situation ?
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

7

Oui, -Wshadow existe et donnera aussi un avertissement dans ce cas (mais pas le bon grin).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité