Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2022-03-23T11:03:46+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Exécution d'un programme sur un autre processeur que celui qui l'a compilé, message #2417512022-03-23T11:03:46+01:00Taurre/@Taurrehttps://zestedesavoir.com/forums/sujet/16146/execution-dun-programme-sur-un-autre-processeur-que-celui-qui-la-compile/?page=1#p241751<p>Salut,</p>
<p>Pour compléter la réponse d'<a href="/@otini" rel="nofollow" class="ping ping-link">@<span class="ping-username">otini</span></a>, il y a deux aspects différents à traiter : </p>
<ol>
<li>La constante entière ;</li>
<li>Sa conversion vers le type de la variable.</li>
</ol>
<p>Par défaut, en C, une constante entière sera de type <code>int</code>, <code>long int</code> ou <code>long long int</code> (ou non signée si octale ou hexadécimal) en fonction de la valeur à représenter. Toutefois, si aucun de ces types ne peut représenter la valeur fournie, la constante sera non typée<sup id="fnref-1-nFxrOW3Zw"><a href="#fn-1-nFxrOW3Zw" class="footnote-ref">1</a></sup>.</p>
<p>Dans un second temps, tu assignes cette constante à une variable, il y a donc une conversion implicite vers le type de la variable. Dans un tel cas, les règles décrites dans <a href="https://zestedesavoir.com/contenus/755/le-langage-c-1/notions-avancees/les-limites-des-types/#2-les-depassements-de-capacite">le chapitre sur les limites des types</a> s’appliquent.</p>
<p>Si tu veux éviter ce genre de problème, tu dois partir des intervalles de valeur garanti par la norme pour chaque type. Ils sont décrits dans le chapitre sur les limites des types également.</p>
<p><strong>Edit</strong> : à noter que si la constante ne peut-être représentée par aucun type, il s’agit d’une erreur (GCC ne la traite pas comme telle, mais Clang, oui).</p>
<figure><blockquote>
<p>Each constant shall have a type and the value of a constant shall be in the range of
representable values for its type.</p>
</blockquote><figcaption>ISO/IEC 9899:201x, doc. N1570, § 6.4.4.1 Integer constants, al. 2, p. 63</figcaption></figure>
<div class="footnotes">
<hr>
<ol>
<li id="fn-1-nFxrOW3Zw">ISO/IEC 9899:201x, doc. N1570, § 6.4.4.1 Integer constants, al. 6, p. 64<a href="#fnref-1-nFxrOW3Zw" class="footnote-backref" title="Retourner au texte de la note 1">↩</a></li>
</ol>
</div>Exécution d'un programme sur un autre processeur que celui qui l'a compilé, message #2417502022-03-23T10:45:52+01:00otini/@otinihttps://zestedesavoir.com/forums/sujet/16146/execution-dun-programme-sur-un-autre-processeur-que-celui-qui-la-compile/?page=1#p241750<p>Tout d’abord, si tu compiles ton code pour un type de processeur, il y a de bonnes chances qu’il ne puisse pas s’exécuter sur un processeur différent car le jeu d’instructions n’est pas le même. Les processeurs x86 64 bits d’Intel sont toutefois compatibles avec le jeu d’instructions 32 bits (hors instructions système).</p>
<p>Cela mis à part, si tu veux un code portable à travers différentes architectures, il faut en effet prendre certaines précautions. Je pense que la ligne de code que tu cites déclencherait un warning dans tous les bons compilateurs, à condition que le warning soit activé — ce qui est rarement le cas par défaut.</p>
<p>Si la taille des entiers est importante, un code portable évitera d’utiliser <code>int</code> et utilisera plutôt les types <code>int32_t</code>, <code>uint64_t</code>, etc. de <code><stdint.h></code>.</p>Exécution d'un programme sur un autre processeur que celui qui l'a compilé, message #2417492022-03-23T10:03:30+01:00AScriabine/@AScriabinehttps://zestedesavoir.com/forums/sujet/16146/execution-dun-programme-sur-un-autre-processeur-que-celui-qui-la-compile/?page=1#p241749<p>Bonjour, </p>
<p>Admettons que je conduise un projet en C. Mettons que dans mon code source, j’écrive ceci : </p>
<p>int a = UNE_TRES_GRANDE_VALEUR; //valeur proche de la limite max du type int sur ma machine</p>
<p>Je compile mon code, il fonctionne bien sur ma machine.
Je veux faire tourner ce code sur un autre processeur, mais sur cet autre processeur, les int ne font pas 4 octets mais 2 (cela peut arriver). Mon code va-t-il fonctionner ? Ce que je crains, c’est que la valeur contenue dans le int sur ma machine ne puisse pas être contenue sur un int d’un autre processeur et que tout soit buggé. Suis-je contraint d’utiliser un autre type que int pour être certain de ne pas avoir de problème dans ce genre ? Y a-t-il des ressources que vous me conseilleriez pour en apprendre sur ces notions de "portabilité" (je ne suis pas certain d’employer le bon mot…) ?
Merci pour votre aide</p>