Voici ce bout de code. Il crée tout simplement un liste de 256 éléments, chacun ayant la valeur de son rang. Une deuxième boucle permet de tester que SkipSpaces n'avance que quand on rencontre SPACE ou HTAB.
//
// Test 1: cursor musn't advance if next char is not SPACE or HTAB
//
{
unsigned char* p1;
unsigned char* p2;
unsigned short i;
unsigned char chars [256];
for (i = 0; i < 256; i ++)
chars [i] = i;
for (i = 0; i < 256; i ++)
{
p1 = p2 = &chars [i];
p1 = pdtlib__SkipSpaces (p2);
if ((i == 0x09) || (i == 0x20))
{
if (p1 != p2 + 1)
FatalError (1);
}
else
{
if (p1 != p2)
FatalError (2);
}
}
PrintDot ();
}
Problèmes :
1. Si je remplace le unsigned short i par un unsigned char i, j'obtiens un programme de 307 octets au lieu de ~700, qui me pond un bra -2 à l'entrée de la fonction, puis une adress error l'instruction d'après (un move.l -(a0),-(a6) qui ne rime à rien ici.
2. De plus, le programme est capable de se lancer sans la présende de la lib dynamique pdtlib.
Avec un unsigned short i, tout fonctionne comme attendu.
Qu'est-ce qui peut provoquer ce comportement pour le moins étrange à votre avis ?