Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/05/2007, à 00:05

gene69

[c pour les experts en compilation] g++: warning étrange.

soit le bout de code:

#include <iostream>

using namespace std;

/* fonction inutile */
void useless(){

	unsigned long a = 4294967294,  b = 4294967295;
	cout <<"a= "<< a <<" b= "<<b<<endl;

	a = (a = b)-1 ; 
	cout <<"a= "<< a <<" b= "<<b<<endl;

}

/* programme principal */
int main(){

	useless();
	return 0;
}

pourquoi obtiens t'on un warning à la compilation?

g++ -Wall -ansi jour2.c -o jour2
jour2.c:135: warning: this decimal constant is unsigned only in ISO C90
jour2.c:135: warning: this decimal constant is unsigned only in ISO C90
jour2.c: In function ‘void useless()’:
jour2.c:138: warning: operation on ‘a’ may be undefined

g++ c'est pour avoir cout sans me faire *****.


1. pourquoi warning: operation on ‘a’ may be undefined ?
2. pourquoi il me refuse l'option -ansi qui demande explicitement de compiler en iso 90? (j'ai une petite idée dessus: c90  != c++ )

Dernière modification par gene69 (Le 16/05/2007, à 00:07)


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#2 Le 16/05/2007, à 10:28

toto4455

Re : [c pour les experts en compilation] g++: warning étrange.

ca dois avoir un rapport avec la norme C90 et la C99 .
sinon tu peux utiliser la notation unsigned long  a = 4294967294UL ,  b = 4294967295UL;

#3 Le 16/05/2007, à 14:54

RBC

Re : [c pour les experts en compilation] g++: warning étrange.

 
a = (a = b)-1 ;

Pourquoi ne pas écrire : a = b - 1;  ?

Hors ligne

#4 Le 16/05/2007, à 20:21

gene69

Re : [c pour les experts en compilation] g++: warning étrange.

parce que j'avais envie d'enchaîner la valeur de retour d'une affectation avec quelquechose.
et maintenant je tombe sur ce warning bizarre parce qu'à mes yeux tout est légal. (même si ça saute à l'optimisation)

je crois que je compile avec g++ ...


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#5 Le 16/05/2007, à 20:38

Watchwolf

Re : [c pour les experts en compilation] g++: warning étrange.

gene69 a écrit :

parce que j'avais envie d'enchaîner la valeur de retour d'une affectation avec quelquechose.
et maintenant je tombe sur ce warning bizarre parce qu'à mes yeux tout est légal. (même si ça saute à l'optimisation)

je crois que je compile avec g++ ...

ben oui tu compile avec g++ .....

Hors ligne

#6 Le 16/05/2007, à 21:54

Le Farfadet Spatial

Re : [c pour les experts en compilation] g++: warning étrange.

Salut à tous !

   Ce serait plus simple si tu donnais également les numéros de lignes mais je crois avoir retrouvé mes petits.

gene69 a écrit :
a = (a = b)-1 ;

Avec les options de compilations que tu as mis, il est normal et sain que g++ grogne, -Wall est là pour veiller au grain. Enlève -Wall et tu verras ce qui se passe. J'ai fait le test chez moi :

$ g++ -Wall -ansi test.cpp -o test
test.cpp: In function ‘void useless()’:
test.cpp:11: attention : operation on ‘a’ may be undefined
$ g++ -ansi test.cpp -o test
$ ./test 
a= 4294967294 b= 4294967295
a= 4294967294 b= 4294967295

Au passage, tu remarqueras que le résultat n'est pas celui que tu escomptais mais il ne fallait pas faire des choses limites...

2. pourquoi il me refuse l'option -ansi qui demande explicitement de compiler en iso 90? (j'ai une petite idée dessus: c90  != c++ )

Techniquement, l'option -ansi existe aussi pour g++, simplement cela signifie respecter scrupuleusement la norme ISO C++ (de 2003) et non pas C90... Cela dit, au vu des messages d'erreurs que tu as transmit, le compilateur n'a pas refusé l'option.

   À bientôt.

                                                                                                                                            Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 16/05/2007, à 22:00)

Hors ligne