Quand je declare une variable dans une fonction, le prog la declare à chaque fois que la fonction est executée
ou seulement la premiere fois?
(sinon ca dois ralentir le prog!)
[edit]Edité par Pegasus le 10-03-2002 à 15:54:59[/edit]
ATARI ruuullllleeeezzzzz!!!!!!
Si la variable est locale "normale", elle sera allouée sur la pile à chaque fois (sauf si GCC la place dans un registre). Si elle est locale statique, elle sera placée directement dans le programme comme une variable globale.
PpHd Le 11/03/2002 à 15:57 Ca depend. Certains compilos pourrait reaalouer en faisant un link a6,#-FFFE.
Meme si je doute que beaucoup de compilos le fassent.
Et qu'en est-il de tigcc?
ATARI ruuullllleeeezzzzz!!!!!!
Ok. G un autre truc qui me preoccuppe : quand je fais ca : void _main(void)
{
clrscr();
unsigned short test=0; //NON SIGNE
test=100;
printf("%dn",test);
test-=200;
printf("%dn",test);
ngetchx();
return;
}
j'obtient à la fin que test=-100, alors que cette variable est cessée etre non signée!!!
=> ??? quand y a un overflow, le prog se fait quand meme chier à le mettre en negatif?
Et comment il le code puique c non signé en principe?
ATARI ruuullllleeeezzzzz!!!!!!
tu fais 100-200 => ça donne -100, c'est logique, non ?
le compilo ne sait pas que 100-200 => -100
à l'exécution, ça revient au même... les signed et unsoigned : 2 octets
ben...
La TI utilises le complément à deux pr les entiers négatifs...
=> 127+1 = -128 il me semble
(pour des chars)
>Pegasus: Y a un moyen de détecter le overflow? (je sais qu'en asm, il y a un flag, mais en C...)
Pas directement.
Mais on peut s'en sortir avec un truc du style:
unsigned short a,b;
/* Saisie de a et de b */
a+=b;
if (a<b) puts("OVERFLOW!\n")
C'est évidemment plus lent qu'un bcs directement après le add en assembleur, mais c'est le mieux qu'on puisse faire en C.