Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-06-01T17:22:33+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Référence et constant, message #2216312020-06-01T17:22:33+02:00turtuxic/@turtuxichttps://zestedesavoir.com/forums/sujet/14123/reference-et-constant/?page=1#p221631<p>Merci pour vos réponses.
Excusez moi pour la lisibilité du code.</p>Référence et constant, message #2213202020-05-26T23:00:38+02:00gbdivers/@gbdivershttps://zestedesavoir.com/forums/sujet/14123/reference-et-constant/?page=1#p221320<p>Le code lisible :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-angelscript"><span class="hljs-built_in">int</span> f1(<span class="hljs-built_in">int</span>& x) { <span class="hljs-keyword">return</span> x; }
<span class="hljs-built_in">int</span> f2(<span class="hljs-keyword">const</span> <span class="hljs-built_in">int</span>& x) { <span class="hljs-keyword">return</span> x; }
<span class="hljs-built_in">int</span> main(<span class="hljs-built_in">void</span>) {
<span class="hljs-built_in">int</span> a = <span class="hljs-number">5</span>;
f1(<span class="hljs-number">2</span>*a); <span class="hljs-comment">// Erreur</span>
f2(<span class="hljs-number">2</span>*a); <span class="hljs-comment">// Fonctionne</span>
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre></div>
<figure><blockquote>
<p>Des maigres souvenirs que j’en ai, une expression littérale (<code>2*a</code> ici) est forcément constante.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/14123/reference-et-constant/?page=1#p221319">entwanne</a></figcaption></figure>
<p>Plutot parce que c’est une rvalue (~ un temporaire) et que les references non constantes acceptent que les lvalues.</p>
<div class="table-wrapper"><table>
<thead>
<tr>
<th>value category</th>
<th>reference category</th>
<th>valide ?</th>
</tr>
</thead>
<tbody>
<tr>
<td>rvalue</td>
<td>mutable lvalue ref (T&)</td>
<td>non</td>
</tr>
<tr>
<td>rvalue</td>
<td>contant lvalue ref (T const&)</td>
<td>oui</td>
</tr>
<tr>
<td>rvalue</td>
<td>rvalue ref (T&&)</td>
<td>oui</td>
</tr>
<tr>
<td>rvalue</td>
<td>copy (T)</td>
<td>oui</td>
</tr>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>lvalue</td>
<td>mutable lvalue ref (T&)</td>
<td>oui</td>
</tr>
<tr>
<td>lvalue</td>
<td>contant lvalue ref (T const&)</td>
<td>oui</td>
</tr>
<tr>
<td>lvalue</td>
<td>rvalue ref (T&&)</td>
<td>non</td>
</tr>
<tr>
<td>lvalue</td>
<td>copy (T)</td>
<td>oui</td>
</tr>
</tbody>
</table></div>
<p>(les constant rvalue ref sont osef en general)</p>Référence et constant, message #2213192020-05-26T22:13:05+02:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/14123/reference-et-constant/?page=1#p221319<p>Salut,</p>
<p>Des maigres souvenirs que j’en ai, une expression littérale (<code>2*a</code> ici) est forcément constante.
Tu ne peux donc pas la passer en tant que référence non constante (qui serait par définition modifiable).</p>
<p>Sans référence il s’agirait d’un passage par copie et ça ne poserait donc pas de problème (la copie peut très bien être modifiable).</p>Référence et constant, message #2213182020-05-26T22:01:22+02:00turtuxic/@turtuxichttps://zestedesavoir.com/forums/sujet/14123/reference-et-constant/?page=1#p221318<p>Bonjour,
J’ai cherché à comprendre le fonctionnement des références et des pointeurs. Et il s’avère que je ne comprends pas ce cas :</p>
<div class="custom-block custom-block-neutral"><div class="custom-block-heading">Code</div><div class="custom-block-body"><p>int f1(int& <img src="/static/smileys/svg/1f606.svg" alt="x)" class="smiley"> { return x; }
int f2(const int& <img src="/static/smileys/svg/1f606.svg" alt="x)" class="smiley"> { return x; }</p><p>int main(void) {
int a = 5;</p><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-angelscript">f1(<span class="hljs-number">2</span>*a); <span class="hljs-comment">// Erreur</span>
f2(<span class="hljs-number">2</span>*a); <span class="hljs-comment">// Fonctionne</span>
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
</code></pre></div><p>}</p></div></div>
<p>Je ne comprends pas bien pourquoi le f2 fonctionne dans ce cas là mais pas le f1. f2 ne devrait il pas avoir une erreur également?
Merci d’avoir pris le temps de me lire !</p>AdaCore Tech Day 2019, message #2192712020-04-20T00:22:59+02:00Aabu/@Aabuhttps://zestedesavoir.com/forums/sujet/13109/adacore-tech-day-2019/?page=1#p219271<p>Bonjour,</p>
<p>La bêta du contenu « AdaCore Tech Day 2019 » a été désactivée.</p>2.7 Mo le HelloWorld en rust, message #2175632020-03-22T23:17:48+01:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217563<p>Tu peux rajouter <code>-C opt-level=s</code> à la compilation pour que Rust optimise la taille du binaire. Chez moi, il passe de 18 à 13 ko.</p>
<p>Après, si tu veux utiliser un débogueur, tu as l’option<code>-g</code> qui va ajouter les symboles de débug (20ko au final), mais va t’aider à te repérer dans le programme.</p>
<p>Pour étudier le binaire, je pense que le mieux est en dynamique. Car le statique contient plein d’autre trucs, et avec dlopen, ça rajoute une couche potentiellement complexe.</p>
<p>Après, j’ai pas bien compris où tu veux en venir. Si tu ne savais pas ce qu’étais la différence statique / dynamique, je ne suis pas sûr que tu arrives à sortir quelque chose d’intéressant du code désassemblé.</p>2.7 Mo le HelloWorld en rust, message #2175602020-03-22T22:48:34+01:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217560<p>combien pèse chez vous un hello world en rust une fois compilé ?</p>
<p>comment procéder pour "s’amuser" avec le code compilé-désassemblé ?
car si ça fait toujours 14 ko même chez vous, je ne sais pas faire plus simple ou alors coder une addition tout bête mais y’aurai aucun intérêt là.</p>
<p>du coup, pour mon histoire de reversing, vous me conseiller de compiler en statique ou en dynamique ou en dlopen ?</p>2.7 Mo le HelloWorld en rust, message #2175192020-03-22T12:36:12+01:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217519<blockquote>
<p>pourriez vous me simplifier la notion de binaire statique / dynamique ?</p>
</blockquote>
<p>En très simplifié :</p>
<p>Soit le programme suivant, en pseudo-code :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-properties"><span class="hljs-attr">importe</span> <span class="hljs-string">bibliothèque standard</span>
<span class="hljs-attr">fonction</span> <span class="hljs-string">principale {</span>
<span class="hljs-attr">affiche</span> <span class="hljs-string">Bonjour</span>
<span class="hljs-attr">}</span>
</code></pre></div>
<p>La fonction affiche n’est pas définie dans mon code. Elle vient d’ailleurs. Mon code compile quand même parce que la fonction est définie dans la bibliothèque standard, que j’importe.</p>
<p>La question est quand et comment.</p>
<ul>
<li>Si, lors de la compilation, je prends toute la bibliothèque standard, avec toutes ses fonctions (au moins toutes les fonctions que j’utilise), et que je les mets dans mon exécutable avec mon code compilé, ce sera un binaire statique.</li>
<li>Si je ne mets dans le binaire que mon code, mais que je charge tout au lancement du programme, j’aurai un binaire dynamique. Par contre, la bibliothèque appelée devra être présente sur la machine où le code est exécuté dans un emplacement que mon programme va chercher. Si la bibliothèque est absente, ou qu’une bibliothèque avec le même nom mais pas les bonnes fonctions est trouvé, ça ne va pas marcher. Si elle existe avec les bonnes fonctions, mais qu’elles ne renvoient pas les bonnes choses, le programme va se lancer mais ne pas réagir correctement. Si la bibliothèque n’est pas trouvée, il faut changer le chemin de recherche (variable d’environnement <code>LD_LIBRARY_PATH</code> sous Linux, par exemple) pour qu’elle le soit.</li>
<li>Je peux aussi demander que la bibliothèque soit importée durant l’exécution de mon programme et non pas au début. Ainsi, le programme plantera durant l’exécution si la bibliothèque n’est pas trouvée.</li>
</ul>
<p>Intérêt et inconvénients de chaque méthode :</p>
<ul>
<li>En statique, c’est plus lourd. Par contre, ça marche sur toutes les machines compatibles avec le code sans avoir besoin d’installer quoi que ce soit.</li>
<li>En dynamique, c’est plus léger (disque et mémoire). Si la bibliothèque est utilisée par deux programmes en même temps, comme ils utilisent la même, elle n’est chargée qu’une fois. Par contre, la bibliothèque doit être présente, au bon endroit, et dans la bonne version. Si une version incompatible avec le même nom est présente, le programme va buguer. C’est donc moins stable dans le temps.</li>
<li>Le chargement à la volée (<em>dlopen</em>) est utile pour les extensions. Le but est de mettre plus de fonctionnalités, mais sous conditions. Par exemple, je fais un programme qui peut se connecter à 4 base de données différentes. Je ne veux pas charger les 4 bibliothèques associées au démarrage, je ne veux même pas dépendre d’elle (sinon, les 4 bases de données doivent être installées sur la machine). Lorsque j’appelle une base de donnée précise, je charge la bonne bibliothèque, et je renvoie une erreur si elle n’est pas présente. Ainsi, je ne dépends pas au démarrage d’autre programme, mais j’ai quand même plein de fonctionnalités.</li>
</ul>2.7 Mo le HelloWorld en rust, message #2175042020-03-22T00:15:02+01:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217504<p>Le fichier ne fait plus que 13.9 ko
mais quand je le lance, j' obtiens
<strong>./test</strong>
<strong>./test: error while loading shared libraries: libstd-c32b051c3aafd36c.so: cannot open shared object file: No such file or directory</strong></p>
<p>pourriez vous me simplifier la notion de binaire statique / dynamique ?</p>
<p>13.9 ko, ça fait encore beaucoup je trouve, dans le passé y avait des jeux d' arcade qui tenait sur une 5pouce 1/4 de 720 ko !</p>2.7 Mo le HelloWorld en rust, message #2172922020-03-18T09:10:50+01:00Lika Kavkasidze/@Lika%20Kavkasidzehttps://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217292<p>En effet, <a href="/membres/voir/entwanne/" rel="nofollow" class="ping ping-link">@<span class="ping-username">entwanne</span></a> dit vrai, la compilation est en statique par défaut ; pour étudier le code, le moyen le plus simple est de compiler en dynamique en passant l’argument <code>-C prefer-dynamic</code> au compilateur.</p>2.7 Mo le HelloWorld en rust, message #2172862020-03-17T22:53:47+01:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217286<p>Salut,</p>
<p>Il me semble que par défaut la compilation génère un binaire statique, donc embarquant tout ce qui est nécessaire de la bibliothèque standard.</p>2.7 Mo le HelloWorld en rust, message #2172852020-03-17T22:37:26+01:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/13750/27-mo-le-helloworld-en-rust/?page=1#p217285<p>salut,
sur linux, ce code: fichier <em>test.rs</em></p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-text">fn main() {
println!("Hello world!");
}
</code></pre></div>
<p>après cette commande:
<strong>rustc test.rs</strong></p>
<p>ça pèse 2.7 Mo ; la commande <strong>strings test</strong> me sort une tonne de trucs.</p>
<p>Ai je raté quelque chose ?
mon objectif est d' étudier le code désassembler juste après la compil, mais avec 2.7 Mo
je vais pas m’en sortir de la sorte.
J’ai envie de travailler à partir de rust plutot que c/c++ ; pour l' instant je galère
à cythonizer mes scripts python ; lua c’est en projet derrière rust.</p>
<p>un conseil ?</p>AdaCore Tech Day 2019, message #2146662020-01-28T10:15:55+01:00Heziode/@Heziodehttps://zestedesavoir.com/forums/sujet/13109/adacore-tech-day-2019/?page=1#p214666<p>Oyez oyez les agrumes !</p>
<p>Je vous annonce avec plaisir la ré-ouverture de la bêta du contenu
« AdaCore Tech Day 2019 » ! Je vous souhaite une agréable lecture à l’adresse
suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/3315/adacore-tech-day-2019/">Je suis de retour !</a> </p></div>
<p>Merci pour votre participation.</p>problème de compilation wxWidgets, message #2125062019-12-25T11:33:06+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=2#p212506<p> Ces options et ce cadre là ?</p>
<figure><img src="/media/galleries/8843/5f53455e-c986-4422-bb62-56ba78f70f31.png" alt="image.png"><figcaption>image.png</figcaption></figure>
<p>Bien entendu j’ai changez le <code>[-std=c++14</code>] en <code>[-std=c++17]</code>.</p>problème de compilation wxWidgets, message #2124942019-12-24T16:51:15+01:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=2#p212494<blockquote>
<p>Je ne sais pas, je n’utilise pas C::B. Mais à mon avis, il faudra mettre les options "à la main" dans un cadre prévu à cet effet. </p>
</blockquote>
<p>JE n’utilise pas non plus CodeBlocks, mais je pense aussi.</p>
<p>Je suis même d’avis que ça sera sûrement plus simple de déplacer les fichiers dans le bon dossier, plutôt que de chercher comment paramétrer ton projet.
Par exemple chez moi sous windows, à l’emplacement C:\MinGW\i686-w64-mingw32, il y a trois dossiers bin, include et lib. En déplaçAnt le dossier wx avec les .h dans include\wx, et en mettant les libwx###.a dans lib, je n’ai ensuite plus rien d’autre à préciser que je veux linker avec wxWidgets, i.e. -lwxbase31u -lwxmsw31u_core.a etc. et ça compile.</p>problème de compilation wxWidgets, message #2124842019-12-24T13:53:44+01:00jo_link_noir/@jo_link_noirhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212484<p>Je ne sais pas, je n’utilise pas C::B. Mais à mon avis, il faudra mettre les options "à la main" dans un cadre prévu à cet effet.</p>problème de compilation wxWidgets, message #2124612019-12-23T19:33:49+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212461<figure><blockquote>
<p>Vu le chemin de la lib, il y a forcément quelque part une configuration qui a été faite pour l’indiqué. L’IDE à tendance à cacher les options du compilateur, mais derrière il utilise <code>-I</code>.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212447">jo_link_noir</a></figcaption></figure>
<p>Et donc comment en le change en <code>isystem</code> stp avec code::blocks</p>problème de compilation wxWidgets, message #2124472019-12-23T17:24:20+01:00jo_link_noir/@jo_link_noirhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212447<figure><blockquote>
<p>Je n’utilise pas cette option mais par habitude j’ai directement mis les headers de wx dans le dossier adéquat, du coup c’est sans doute pour ça que je n’ai aucun warning de mon côté.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212414">QuentinC</a></figcaption></figure>
<p>Probablement, le compilateur est configuré pour chercher les fichiers "système" dans un certains nombres de dossier prédéfinit qui peuvent être affichés avec <code>g++ -v -E fichier_vide.cpp</code>.</p>
<figure><blockquote>
<p>Quel chemin ? Parce que je n’indique pas de chemin avec <code>-I</code> désoler si la question est un peu débile, mais je débute <img src="/static/smileys/siffle.png" alt=":-°" class="smiley"> </p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212417">cerveau</a></figcaption></figure>
<p>Vu le chemin de la lib, il y a forcément quelque part une configuration qui a été faite pour l’indiqué. L’IDE à tendance à cacher les options du compilateur, mais derrière il utilise <code>-I</code>.</p>problème de compilation wxWidgets, message #2124172019-12-23T12:11:57+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212417<p>Quelles chemin ? Parce que je n’indique pas de chemin avec <code>-I</code> désoler si la question est un peut débile mais je débute <img src="/static/smileys/siffle.png" alt=":-°" class="smiley"> </p>problème de compilation wxWidgets, message #2124142019-12-23T06:18:56+01:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212414<blockquote>
<p>Pour ne pas avoir les avertissements des bibliothèques, il faut indiquer les chemins avec -isystem plutôt que -I. C’est une configuration de l’IDE/système de build. </p>
</blockquote>
<p>Ah, c’est un bon truc à savoir ça; je ne savais pas.</p>
<p>Je n’utilise pas cette option mais par habitude j’ai directement mis les headers de wx dans le dossier adéquat, du coup c’est sans doute pour ça que je n’ai aucun warning de mon côté.</p>problème de compilation wxWidgets, message #2124102019-12-22T23:55:11+01:00jo_link_noir/@jo_link_noirhttps://zestedesavoir.com/forums/sujet/13346/probleme-de-compilation-wxwidgets/?page=1#p212410<p>Pour ne pas avoir les avertissements des bibliothèques, il faut indiquer les chemins avec <code>-isystem</code> plutôt que <code>-I</code>. C’est une configuration de l’IDE/système de build.</p>