OVH Cloud OVH Cloud

Définition de 'inf'

22 réponses
Avatar
tournevissette
Bonjour,
j'aimerais assigner '+inf' =E0 une variable, et je me demandais
comment faire ca de mani=E8re =E9l=E9gante en C/C++, qui ne g=E9n=E9rerait
aucun warning, ni a la compilation, ni =E0 l'=E9xecution.
J'ai essay=E9 :

const double inf =3D std::pow(1024.0,1024.0);

mais c'est pas tr=E8s beau. De plus, ca g=E9n=E8re un warning =E0
l'=E9xecution,
avec bcc32.
Est-ce que quelqu'un a une id=E9e ?

Merci d'avance.

2 réponses

1 2 3
Avatar
Tournevissette
Je pense que cela aide, car au niveau du stockage en memoire, les
adresses des variables seront alignés sur un même multiple (ici 4
vraisemblablement), et que l'accès mémoire, même si tu dis qu'il est
indéfini dans la norme, sera autorisé par le processeur.
Ce n'est pas le cas, par exemple quand on essaye de lire un 'int' a une
adresse impaire, ce qui fait planter le programme (au moins sur
certains Sun) :

char tmp[5];
int a = *(int*)(tmp+1);

plante chez moi (sur sun , mais pas sur pc).
Avatar
Gabriel Dos Reis
"Tournevissette" writes:

| Je pense que cela aide, car au niveau du stockage en memoire, les
| adresses des variables seront alignés sur un même multiple (ici 4
| vraisemblablement), et que l'accès mémoire, même si tu dis qu'il est
| indéfini dans la norme, sera autorisé par le processeur.

Mais, le point n'est pas qu'un accès en mémoire soit autorisà © par le
processeur ou non. Le point est la sémantique, si elle existe, qu'on
donne à un tel accès. J'ai mentionné quelques architectures dans le
précédent message mais tu ne sembles pas avoir noté : PowerP C, VAX me
viennent à l'esprit. Si on veut faire plus intéressant, on peut a ller
voir les ARMs.

| Ce n'est pas le cas, par exemple quand on essaye de lire un 'int' a une
| adresse impaire, ce qui fait planter le programme (au moins sur
| certains Sun) :
|
| char tmp[5];
| int a = *(int*)(tmp+1);
|
| plante chez moi (sur sun , mais pas sur pc).

Je sais ; mais il y a plusieurs manières de copier un tableau de char
dans un objet. Celle que tu présentes est invalide pour la raison que
j'ai donnée auparavant. La manière officielle et canonique est me mcpy()

-- Gaby
1 2 3