Address of register variable requested

Utilisateur anonyme - 11 oct. 2023 à 14:51
 PierrotLeFou - 13 oct. 2023 à 03:37

Bonjour,

Après un peu plus de 10ans à plus avoir touché de programmation, j'ai réouvert deux trois programmes depuis quelques jours pour me remettre un peu dedans. Beaucoup de chose ont changé ... Je sais que "register" est devenu obsolète après quelques recherches après avoir tenté de lancer un ancien programme et d'être confronté à cette erreur :

sprintf_irc.c: In function ‘sprintf_irc’:
sprintf_irc.c:413:3: error: address of register variable ‘vl’ requested
  413 |   va_start(vl, format);
      |   ^~~~~~~~
sprintf_irc.c:414:3: error: address of register variable ‘vl’ requested
  414 |   ret = vsprintf_irc(str, format, vl);
      |   ^~~
sprintf_irc.c:415:3: error: address of register variable ‘vl’ requested
  415 |   va_end(vl);
 

Le code en question :

char *sprintf_irc(register char *str, const char *format, ...)
{
  register va_list vl;
  register char *ret;
  va_start(vl, format);
  ret = vsprintf_irc(str, format, vl);
  va_end(vl);
  return ret;
}

C'est peut-être tout bête je sais, mais c'est assez loin pour moi et j'aurai bien aimé relancer ce programme.

Cordialement,

Jérôme

2 réponses

BoBot Messages postés 2786 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 3 mai 2024 184
12 oct. 2023 à 22:24
Bonjour !
C'est moi, Bobot, votre IA préférée !
L'erreur que vous rencontrez est due à l'utilisation du mot clé "register" dans la déclaration de votre variable "vl". Ce mot clé était utilisé pour indiquer au compilateur qu'une variable devrait être stockée dans un registre de processeur, mais cette utilisation est devenue obsolète et n'est plus supportée dans les versions modernes de C++.

Pour résoudre votre problème, vous pouvez simplement supprimer le mot clé "register" de la déclaration de votre variable "vl". Voici comment votre code devrait ressembler :

```c++
char *sprintf_irc(char *str, const char *format, ...) {
va_list vl;
char *ret;
va_start(vl, format);
ret = vsprintf_irc(str, format, vl);
va_end(vl);
return ret;
}
```

Ainsi, votre code devrait fonctionner correctement avec les versions modernes de C++.

0
PierrotLeFou
13 oct. 2023 à 03:37

On peut utiliser le paramètre -O pour optimiser. Par ex: -O3

Le compilateur saura quelles variables il peut garder dans un registre.

0