

Kevin Kofler (./53) :
Normalement, -Wextra devrait aussi passer avec TIGCC!
Ah, il est pas dans la doc.


Kevin Kofler (./53) :
Normalement, -Wextra devrait aussi passer avec TIGCC!
Kevin Kofler (./59) :
Attention quand-même, ce truc est un lvalue cast, ce n'est pas du C standard et ce n'est plus géré par le GCC officiel (mais celui de TIGCC est patché pour le permettre).
Folco (./61) :Kevin Kofler (./59) :
Attention quand-même, ce truc est un lvalue cast, ce n'est pas du C standard et ce n'est plus géré par le GCC officiel (mais celui de TIGCC est patché pour le permettre).
Alors que convient-il de faire pour lire mon short et pointer sur celui d'après ?
Kevin Kofler (./59) :
uant aux goto, ce qui est intéressant, c'est qu'on peut aussi rentrer dans les blocs avec, ce qui permet d'éviter pas mal de répétitions. Cf. par exemple cette fonction (c'est du C++, mais on peut faire la même chose en C): http://tigcc-linux.cvs.sourceforge.net/viewvc/tigcc-linux/ktigcc/mainform.cpp?revision=1.101&view=markup#l_1372 .
Folco (./61) :
Alors que convient-il de faire pour lire mon short et pointer sur celui d'après ?![]()
void func(void * bla) { short *blu = (short*)bla; blu ++; }
void func(void * bla) { char *blu = (char*)bla; blu +=2; }
voici donc un exemple de très magnifique fonction où j'ai utilisé un goto :int open_file (const char *filename) {
char nom_complet[MAX_CAR_NOM_FIC];
char *basename;
char *chiffre;
Bool sauvegarde = FALSE;
SYM_ENTRY *se;
int i;
nom_complet[0] = 0;
if ((basename = strchr (filename, '\'))) {
basename++;
chiffre = nom_complet + sprintf (nom_complet + 1, "%.17s", filename);
if ((se = SymFindPtr (chiffre + 1, 0))) {
byte *ptr = HeapDeref (se -> handle);
if (!strcmp ("ZSVG", ptr + *(word*)ptr - 4)) {
strncpy (nom_jeu, ptr + 10, 7);
chiffre =
nom_complet + 1 + sprintf (nom_complet + 1, REPERTOIRE_JEUX "\%.7s", ptr + 10);
sauvegarde = TRUE;
}
else {
*chiffre = 0;
strncpy (nom_jeu, basename, 7);
}
}
else goto argh;
}
else {
chiffre =
nom_complet + 1 + sprintf (nom_complet + 1, REPERTOIRE_JEUX "\%.7s", filename);
strncpy (nom_jeu, filename, 7);
}
chiffre[1] = 0;
for (i = 0, *chiffre = '1'; i < 4; i++, (*chiffre)++) {
if ((se = SymFindPtr (chiffre + 1, 0)))
game_file.fichier[i] = se -> handle;
else break;
#ifndef DOORS
if (!ttarchive_valid (HeapDeref (game_file.fichier[i]) + 2)) {
#else
if (({
void *ptr = HLock (game_file.fichier[i]);
!ptr || !(game_file.descriptors[i] = shrnklib_OpenArchive (ptr + 2));
})) {
#endif /* DOORS */
ST_helpMsg (FRENCH ? "fichier non valide" : "invalid gamefile");
return 0;
}
}
if (i == 0) {
argh :
ST_helpMsg (FRENCH ? "jeu non trouvé" : "game not found");
return 0;
(ça n'a aucun intérêt sauf que j'avais envie d'utiliser cette fonction, enfin c'est juste un exemple où je ne vois pas vraiment comment éviter le goto sans dupliquer du code, contrairement à ceux de godzil)
Folco (./70) :
Je ne fais aucune allocation à la main, j'ouvre une lib (de données) et je crée un plane. Je les libère en sortie. Ca pourrait venir de gl_main qui ne libère par quelque chose ? Faut dire que je quitte le programme avec exit, donc gl_main ne termine jamais.
Folco (./74) :
Merde. Donc avec gl_main, au revoir exit
src/static/main.c :PUSH_DSCREEN(dscr[0]); gl_init_dscreen(&dscr[1], &hd);
Ca searit possible de rajouter un gl_push_hd(hd) derrière ? Histoire de pouvoir s'en sortir avec un gl_free_hd() ?
PpHd (./77) :
Tu dois pouvoir t'en sortir avec un setjmp/longjmp.
PpHd (./77) :
Sinon tu patches les sources
const bool isPlopLoaded= (varObscure & flagObscur)!=42 && !huhu ; if ( isPlopLoaded ) { //... }
Godzil (./85) :
Attention, NULL ne vaux pas forcement 0...