GROS_FAIGNAN Posté(e) le 23 mai 2009 Partager Posté(e) le 23 mai 2009 bonjour, j'ai suivi les tutoriels du site du zero et j'en suis arriver au TP N°1 (creation d'un jeu "nombre Mystere") pour creer le jeu il indique d'initier une instruction de calcul d'un nombre alleatoire nommée : "srand(time(NULL));nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;" et d'inclure la bibliotheque #include <time.h> sauf que le probleme c'est que bien que le programme fonctionne, l'utilitaire de débogage m'indique un avertissement : "warning C4244: 'fonction' : conversion de 'time_t' en 'unsigned int', perte possible de données" et je n'arrive pas à comprendre de quoi il sagit Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 23 mai 2009 Partager Posté(e) le 23 mai 2009 la fonction time() renvoit une valeur de type time_t, or, tu stockes cette valeur dans un unsigned int (quand tu passes le résultats de time() en argument de srand()), il y a donc une conversion de type faite implicitement. Le compilateur t'averti que cette conversion peut engendrer une perte de données. Si tu veux vraiment décomposer les étapes, il faudrait faire quelque chose du genre : unsigned int t = (unsigned int) time(NULL); srand(t); Là, on voit bien les deux étapes (appel de time() et stockage de la valeur, puis appel de srand() avec la valeur stockée), et la conversion de type est explicite. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 23 mai 2009 Auteur Partager Posté(e) le 23 mai 2009 super, extra clair et super rapide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 7 juin 2009 Auteur Partager Posté(e) le 7 juin 2009 salut, juste une petite question comme sa, sauf erreur ont peut modifier la valeur d'une constante #define (meme si sa doit pas ce faire). #define CONSTANTE 10 int main(int argc, char *argv[]) { /*......code.......*/ CONSTANTE 2; /*......code.......*/ } en tout cas sa a l'air d'etre pris en compte par le compilateur Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 7 juin 2009 Partager Posté(e) le 7 juin 2009 Ah ben non. Comme leur nom l'indique, les constantes sont... constantes (ça veut dire qu'elle ne changent pas, jamais) D'ailleurs je serais très étonné que le code que tu aie mis en exemple compile C'est exactement comme si tu faisais int main(int argc, char *argv[]) { /*......code.......*/ 10 2; /*......code.......*/ } Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 7 juin 2009 Auteur Partager Posté(e) le 7 juin 2009 D'ailleurs je serais très étonné que le code que tu aie mis en exemple compile ouais moi aussi je trouve sa bizarre mais sa compile, sa doit ignorer purement et simplement l'instruction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 7 juin 2009 Partager Posté(e) le 7 juin 2009 Exact, c'est remplacé par le processeur directement dans le source. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 7 juin 2009 Partager Posté(e) le 7 juin 2009 D'ailleurs je serais très étonné que le code que tu aie mis en exemple compile ouais moi aussi je trouve sa bizarre mais sa compile, sa doit ignorer purement et simplement l'instruction. Ca ne me suffit pas, un compilateur n'ignore pas les instructions au petit bonheur la chance Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 8 juin 2009 Auteur Partager Posté(e) le 8 juin 2009 Ca ne me suffit pas, un compilateur n'ignore pas les instructions au petit bonheur la chance alors pour la forme, a priori j'imagine qu'en fait c'est PAS une instruction sa remplace TAILLE par 10 et le lis dans le code puis lit 2, et c'est tout sa en fait rien, puisque il n'y a aucune instruction de travail. (c'est ce que j'ai trouver de plus plausible). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 8 juin 2009 Partager Posté(e) le 8 juin 2009 Ca vient de ton compilateur. C'est lequel ? Il date de quand ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 8 juin 2009 Auteur Partager Posté(e) le 8 juin 2009 Ca vient de ton compilateur. C'est lequel ? Il date de quand ? c'est a dire ? c'est le compilateur de base fournis avec visual studio C++ express (d'apres ce que j'ai entendu dire sa a été concus sur la base de MingW) mais a verifier... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 8 juin 2009 Partager Posté(e) le 8 juin 2009 Quelle version de VS ? Parce que sur la 2008, ca plante bien à la compilation. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 8 juin 2009 Auteur Partager Posté(e) le 8 juin 2009 Quelle version de VS ? Parce que sur la 2008, ca plante bien à la compilation. bah vu que j'ai Sisual Studio C++ Express V9.0 edition 2008, j'ai refais le Test, alors j'ai peut etre fait une erreur, sa compile mais quand j'attribue pas de valeur a la constante lors du #define CONSTANTE et sa fonctionne aussi quand je #define 2 fois la meme CONSTANTE avec 2 taille différentes (dans ce cas la sa me renvoie quand meme un warning "redefinition de constante) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 8 juin 2009 Partager Posté(e) le 8 juin 2009 Quelle version de VS ? Parce que sur la 2008, ca plante bien à la compilation. bah vu que j'ai Sisual Studio C++ Express V9.0 edition 2008, j'ai refais le Test, alors j'ai peut etre fait une erreur, sa compile mais quand j'attribue pas de valeur a la constante lors du #define CONSTANTE et sa fonctionne aussi quand je #define 2 fois la meme CONSTANTE avec 2 taille différentes (dans ce cas la sa me renvoie quand meme un warning "redefinition de constante) Bon, ben c'est normal, on peut mettre une variable "seule", meme si ca sert à rien. Mais le coup du #define CONSTANTE 10 int main(int argc, char *argv[]) { /*......code.......*/ CONSTANTE 2; /*......code.......*/ } Ça, ça marche pas. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 8 juin 2009 Auteur Partager Posté(e) le 8 juin 2009 autant pour moi alors, je me suis gourrer quelque part, je vais en profiter pour reverifier ce que j'ai marqué Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 15 juin 2009 Auteur Partager Posté(e) le 15 juin 2009 alors nouvelle petite question sur les lib graphique. les tuto du site du zero nous invite à commencer par la lib graphique SDL, et nous oriente sur d'autre tuto pour les utiliser les lib comme win 32. d'après ce qui est préciser dans le tuto pour utiliser la SDL (sout visual comme ailleur) ont doit d'abord "installé" la lib dans visual puis ensuite creer une nouveau projet SDL. donc quelque part en extrapolant, si je creer un nouveau projet SDL je peut pas avoir aux fonctionnalité de la lib win32. donc imaginon que je veuille creer une programme qui utilise quelque fonction de SDL et win 32, est ce que sa suppose que je doit tout réécrire moi meme ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 16 juin 2009 Partager Posté(e) le 16 juin 2009 Normalement aucun problème pour utiliser plusieurs lib au sein d'un projet. Les types de projets que tu peux sélectionner représentent des modèles, des projets préconfigurés. Tu devrais pouvoir utiliser les librairies SDL et win32 même en créant un "nouveau projet vierge", il faut juste ajouter les librairies à la main après coup. Ce qui ne devrait pas être bien difficile. Tout ce conditionnel c'est parce que je n'ai jamais touché aux IDE de MS. J'utilise NetBeans sur des projets Java et ça marche exactement comme je viens de le décrire. Et je ne vois pas de raison de faire les choses différemment avec un autre IDE et un autre langage. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 6 juillet 2009 Auteur Partager Posté(e) le 6 juillet 2009 alors je viens d'installer la SDL, mais perso (je pense avoir suivi la procedure donnée), sa compile correctement mais il y a apparament un conflit au linkage avec LIBCMT.lib et _msvcrt.lib [size="1"]1>------ Dbut de la gnration: Projet: LibGraphique_SDL_1.0.c, Configuration: Debug Win32 ------ 1>dition des liens en cours... 1>msvcrt.lib(MSVCR90.dll) : error LNK2005: _isspace dj dfini(e) dans LIBCMT.lib(_ctype.obj) 1>msvcrt.lib(MSVCR90.dll) : error LNK2005: _exit dj dfini(e) dans LIBCMT.lib(crt0dat.obj) 1>LIBCMT.lib(crt0init.obj) : warning LNK4098: conflit entre la bibliothque par dfaut 'msvcrt.lib' et les autres bibliothques; utilisez /NODEFAULTLIB:library 1>C:\Users\CHARLES\Documents\Visual Studio 2008\Projects\LibGraphique_SDL_1.0.c\Debug\LibGraphique_SDL_1.0.c.exe : fatal error LNK1169: un ou plusieurs symboles dfinis diffrentes reprises ont t rencontrs 1>Le journal de gnration a t enregistr l'emplacement "file://c:\Users\CHARLES\Documents\Visual Studio 2008\Projects\LibGraphique_SDL_1.0.c\LibGraphique_SDL_1.0.c\Debug\BuildLog.htm" 1>LibGraphique_SDL_1.0.c - 3 erreur(s), 1 avertissement(s) ========== Gnration: 0 a russi, 1 a chou, 0 mis jour, 0 a t ignor ========== [/size] et la par contre je suis perdu, j'ai suivi la proc qui est donné sur le site du zero (partie visual studio express) par contre j'ai remarqué que la SDL est à la base prévue pour visula C/C++ 5, 6 et 7 hors a ce jours on en est a la V-9. sa viendrais pas de la ??? [EDIT] nan sa y est c'est bon j'ai trouver le soucis sous visual : projet>propriété>propriété de configuration>C/C++>generation de code>bibliothèque runtime : j'avais fais une confusion, faut mettre DLL Multithread(/MD) (au lieu de Multithread (/MT)... Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 6 juillet 2009 Auteur Partager Posté(e) le 6 juillet 2009 RE, heu en fait j'ai finalement un petit probleme avec la SDL: je sait pas trop ce qui c'est passé mais a un moment mon code a produit une erreur de type "stack overflow" et depuis ont dirais qu'il arrive plus a linker la sdl ??? c'est normale ??? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 6 juillet 2009 Partager Posté(e) le 6 juillet 2009 non, pas vraiment recopie-nous ce que te renvoie la compil Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 6 juillet 2009 Auteur Partager Posté(e) le 6 juillet 2009 non, pas vraiment recopie-nous ce que te renvoie la compil la compile fonctionne bien, mais plus le linkage out/stderr ---------- [size="1"]1>------ Dbut de la gnration: Projet: LibGraphique_SDL_1.0.c, Configuration: Release Win32 ------ 1>dition des liens en cours... 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_WaitEvent 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_Init 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_SetVideoMode 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_FillRect 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_WM_SetCaption 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_UpperBlit 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_GetError 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_MapRGB 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_CreateRGBSurface 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_Flip 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_Quit 1>main.obj : error LNK2001: symbole externe non rsolu _SDL_FreeSurface 1>MSVCRT.lib(crtexe.obj) : error LNK2001: symbole externe non rsolu _main 1>C:\Users\CHARLES\Documents\Visual Studio 2008\Projects\LibGraphique_SDL_1.0.c\Release\LibGraphique_SDL_1.0.c.exe : fatal error LNK1120: 13 externes non rsolus 1>Le journal de gnration a t enregistr l'emplacement "file://c:\Users\CHARLES\Documents\Visual Studio 2008\Projects\LibGraphique_SDL_1.0.c\LibGraphique_SDL_1.0.c\Release\BuildLog.htm" 1>LibGraphique_SDL_1.0.c - 14 erreur(s), 0 avertissement(s) ========== Gnration: 0 a russi, 1 a chou, 0 mis jour, 0 a t ignor ========== [/size] la compile me renvoie 0 erreur 0 warnings[/size] [/size] Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 6 juillet 2009 Auteur Partager Posté(e) le 6 juillet 2009 ouaye j'ai trouver un truc, en fait c'etait passer en mode release au lieu de debug... ??? en tout cas j'ai plus le probleme de link. par contre j'ai toujours le stack overflow. curieux d'ailleurs, meme en "pas a pas détaillé" il execute meme pas la première instruction ni meme la declaration des variables. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 6 juillet 2009 Partager Posté(e) le 6 juillet 2009 sur la page de téléchargement de la libSDL, tu as une première version (vraisemblablement la tienne), et une seconde estampillée "devel". la seconde devrait t'éviter d'avoir ces erreurs à la compil en mode debug. et pour la stack overflow ... on manque un peu de détails quand / comment ça se produit ? des printf de debug pourraient aider à identifier le problème. Lien vers le commentaire Partager sur d’autres sites More sharing options...
GROS_FAIGNAN Posté(e) le 6 juillet 2009 Auteur Partager Posté(e) le 6 juillet 2009 sur la page de téléchargement de la libSDL, tu as une première version (vraisemblablement la tienne), et une seconde estampillée "devel".la seconde devrait t'éviter d'avoir ces erreurs à la compil en mode debug. et pour la stack overflow ... on manque un peu de détails quand / comment ça se produit ? des printf de debug pourraient aider à identifier le problème. c'est bien la version devel que j'ai installé pour la SDL. sinon, bas des printf de debug j'en ai meme pas puisque j'ai pas reactivé la console mais sa pourrait etre une solution (a voir comment faire) sinon pour la gestion des erreur j'ai fait des fprintf dans stderr, mais pour l'instant j'en ai pas un seul qui a été créer. et puis en plus comme je le disais tout a l'heure c'est presque comme si sa ce produisait avant que le programme se lance. j'ai mis des points d'arret au niveau des declaration de variables dans le main mais sa ne les atteint meme pas. pour info la probleme se produit depuis que j'ai touché a ma double boucle for(k=à;...) for(i=0;...) dons l'utilité n'es que de produire un degrader de couleur. pourtant je pense avoir remis l'algo comme il l'etait au depart. [size=2][color="#0000ff"][size=2][color="#0000ff"]int[/color][/size][/color][/size][size=2] main([/size][size=2][color="#0000ff"][size=2][color="#0000ff"]int[/color][/size][/color][/size][size=2] argc, [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]char[/color][/size][/color][/size][size=2] *argv[]) { SDL_Surface *screen=NULL, *STD2_surf1[510][510]={0}; Uint32 STD1_color1=0, STD1_color2=0; [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]int[/color][/size][/color][/size][size=2] i=0,j=0,k=0, l=0; SDL_Rect position; position.x=0; position.y=0; [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]if[/color][/size][/color][/size][size=2](SDL_Init(SDL_INIT_VIDEO)==-1) { fprintf(stderr, [/size][size=2][color="#a31515"][size=2][color="#a31515"]"Erreur d'initialisation de la SDL : %s\n"[/color][/size][/color][/size][size=2], SDL_GetError()); exit(EXIT_FAILURE); } SDL_WM_SetCaption([/size][size=2][color="#a31515"][size=2][color="#a31515"]"Ma super fentre SDL !"[/color][/size][/color][/size][size=2], NULL); screen=SDL_SetVideoMode(510, 510, 32, SDL_HWSURFACE); [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]if[/color][/size][/color][/size][size=2](screen==NULL) { fprintf(stderr,[/size][size=2][color="#a31515"][size=2][color="#a31515"]"impossible de charger le mode video : %s, ligne 12"[/color][/size][/color][/size][size=2],SDL_GetError()); exit(EXIT_FAILURE); } STD1_color1=SDL_MapRGB(screen->format,0,0,0); SDL_FillRect(screen,NULL,STD1_color1); [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]for[/color][/size][/color][/size][size=2](k=0;k<510;k++) { i=0; [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]if[/color][/size][/color][/size][size=2](k>255) { j++; } [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]for[/color][/size][/color][/size][size=2](i=0;i<510;i++) { STD2_surf1[k][i]=SDL_CreateRGBSurface(SDL_HWSURFACE,1,1,32,0,0,0,0); STD1_color2=SDL_MapRGB(screen->format,k,i,j); SDL_FillRect(STD2_surf1[k][i],NULL,STD1_color2); position.y=i; SDL_BlitSurface(STD2_surf1[k][i],NULL,screen,&position); } position.x=k; } SDL_Flip(screen); pause(); [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]for[/color][/size][/color][/size][size=2](k=0;i<255;i++) { [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]for[/color][/size][/color][/size][size=2](i=0;i<255;i++) { SDL_FreeSurface(STD2_surf1[k][i]); } } SDL_Quit(); [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]return[/color][/size][/color][/size][size=2] EXIT_SUCCESS; } [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]void[/color][/size][/color][/size][size=2] pause() { [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]int[/color][/size][/color][/size][size=2] continuer = 1; SDL_Event [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]event[/color][/size][/color][/size][size=2]; [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]while[/color][/size][/color][/size][size=2] (continuer) { SDL_WaitEvent(&[/size][size=2][color="#0000ff"][size=2][color="#0000ff"]event[/color][/size][/color][/size][size=2]); [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]switch[/color][/size][/color][/size][size=2]([/size][size=2][color="#0000ff"][size=2][color="#0000ff"]event[/color][/size][/color][/size][size=2].type) { [/size][size=2][color="#0000ff"][size=2][color="#0000ff"]case[/color][/size][/color][/size][size=2] SDL_QUIT: continuer = 0; } } } [/size] Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 6 juillet 2009 Partager Posté(e) le 6 juillet 2009 Tu t'es bien remis en débug (et non release) ? C'est important pour le bon fonctionnement des points d'arrêt. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.