88Fermer90
Kevin KoflerLe 16/04/2009 à 18:16
Folco (./23) :
void Draw (void);
void Draw()
{
DrawMenu(RootMenu);
}

Écris plutôt:
void Draw(void)
{
DrawMenu(RootMenu);
}

tout simplement. Et les () sont une très mauvaise habitude à prendre en C (ça signifie "prend n'importe quoi comme arguments" pour des raisons historiques), mets toujours (void).
Folco (./24) :
	short MaxLenght = 0;			//size of the greatest string
	short TmpLenght;				//size of current item

Je te signale qu'on écrit length, width, mais height. Cherche pas à comprendre. grin
Folco (./28) :
Ah ok, comme d'habitude il voulait son petit "const" kivabien. L'assembleur produit est identique, je me demande pourquoi il me fait chier avec ça, c'est sûrement un bug. embarrassed

Non, c'est pour éviter que tu écrases quelque chose que tu n'as pas le droit d'écraser. Le C n'est pas entièrement type-safe, mais il l'est beaucoup plus que l'assembleur qui te permet de mixer les données de nature différente n'importe comment.
Folco (./29) :
Il râle pas, alors que ItemPtr est un pointeur, et strlen un long. Ok, c'est la même taille. Je m'attendais à devoir faire un cast, c'est pas la peine. C'est normal ?

Oui, c'est normal, les adresses forment un espace vectoriel à une dimension. Dans un espace vectoriel, on peut ne considérer qu'un type de vecteurs (comme tu essaies de le faire), mais pour éviter des bêtises, il est plus judicieux de considérer des vecteurs de position et des vecteurs de direction. (En particulier, si tu travailles avec ces 2 classes de vecteurs, tu n'as pas besoin d'une origine.) Prends comme exemple le plan euclidien: un vecteur de position est un point, genre A, un vecteur de direction est un vecteur de type AB, où A et B sont des points. Tu ne peux pas ajouter 2 vecteurs de position, par exemple A+B n'a aucun sens. En revanche, tu peux ajouter un vecteur de direction à un vecteur de position, genre A+AB=B, B+AB=C tel que B est le milieu de AC etc. Tu peux aussi ajouter un vecteur de direction à un autre, genre AB+BC=AC. Et ben, avec les pointeurs, c'est pareil: les pointeurs sont des vecteurs de position, les entiers de type size_t les vecteurs de direction. Tu ne peux pas additionner 2 pointeurs, mais tu peux ajouter un entier à un pointeur et bien sûr tu peux additionner 2 entiers.

Soit dit au passage que l'espace vectoriel des pointeurs a une origine, NULL, mais l'arithmétique des pointeurs n'utilise pas cette origine, et en particulier l'utilisation de ptr1+(ptr2-NULL) pour additionner 2 pointeurs n'est pas prévue par le standard C (ça pourrait à la limite faire ce que tu attends, mais ce n'est pas portable du tout évidemment et franchement ça n'a aucun sens).
Folco (./35) :
Je voudrais savoir comment définir quelque part les 4 constantes caracères à la suite : {0,0,239,127}.

const SCR_RECT fullscreen={{0,0,239,127}};
Sinon, tu peux aussi utiliser directement &(const SCR_RECT){{0,0,239,127}} partout où tu en as besoin et ça sera unifié par le constant merging.
squalyl (./39) :
oui, j'ai oublié de dire, pour mater le code généré, ne pas oublier le flag -O0 (qui devrait s'appeler -fhuman-readable grin)

Euh, pas vraiment, ça pond du code affreux et inutilement compliqué, la sortie de -Os est souvent beaucoup plus lisible. (En revanche, -O2 et -O3 peuvent donner du code bizarre (mais rapide) dans certains cas.)
Folco (./41) :
Pour le moment, je reste en -o2 classique, l'assembleur se lit très bien et me parait bien foutu.

Pourquoi -O2 et pas -Os?
va juste falloir que je trouve comment dire à TIGCC d'utiliser le handler de f-line pour les ROM-calls, et non $c8

Project / Options / Compilation / Program options... / Reloc Format / Choose the ROM call format that suits your needs: F-Line