Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2022-10-14T13:00:00+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Visual Studio et Visual Studio Code comportement différent pour le même code, message #2458952022-10-14T13:00:00+02:00Kev_k/@Kev_khttps://zestedesavoir.com/forums/sujet/16525/visual-studio-et-visual-studio-code-comportement-different-pour-le-meme-code/?page=1#p245895<p>Salut salut <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>
<p>Grand merci à toi <a href="/@gbdivers" rel="nofollow" class="ping ping-link">@<span class="ping-username">gbdivers</span></a> pour la rapidité de la réponse. Les explications sont très claires et les liens a l’appuis les rendent encore plus magnifique. Infiniment merci.</p>
<p>Kev_k</p>Visual Studio et Visual Studio Code comportement différent pour le même code, message #2458902022-10-14T03:37:17+02:00gbdivers/@gbdivershttps://zestedesavoir.com/forums/sujet/16525/visual-studio-et-visual-studio-code-comportement-different-pour-le-meme-code/?page=1#p245890<p>Le problème vient du fait que les compilateurs ont des options par défaut différentes. Et donc vont être plus ou moins tolérants aux erreurs.</p>
<p>Par exemple, ton 3ème code, mingw, clang et msvc détectent tous les 3 le problème avec <code>const</code> (donc aucun doute que ce <code>const</code> est une erreur de syntaxe). La différence est que les 2 premiers considèrent que c’est une erreur et refusent de compiler. Le 3ème ignore le <code>const</code> avec un message d’avertissement :</p>
<div class="hljs-code-div hljs-code-text"><pre><code class="hljs language-text"><source>(8): warning C4227: anachronism used: qualifiers on reference are ignored
</code></pre></div>
<p>Pour ça qu’il est important d’activer les options de compilation. Tu peux regarder ce projet pour les options à activer : <a href="https://github.com/jonathanpoelen/cpp-compiler-options">https://github.com/jonathanpoelen/cpp-compiler-options</a>. Sans cela, on a plus de risques d’avoir un code qui n’est pas compatible sur tous les compilateurs. Et pour les projets pro, il est courant de compiler avec plusieurs compilateurs différents.</p>
<p>Une règle importante aussi : <strong>il faut considérer les avertissements comme des erreurs</strong>. Surtout quand on débute. Un code ne doit pas être considéré comme valide tant qu’il y a des avertissements.</p>
<p>Pour ton premier code, il y a effectivement un problème aux lignes 4 et 5. Le problème des multicharacter literals, c’est que c’est implementation-defined (<a href="https://stackoverflow.com/questions/7755202/multi-character-constant-warnings">https://stackoverflow.com/questions/7755202/multi-character-constant-warnings</a>), c’est a dire que chaque compilateur fait ce qu’il veut. Ca fait partie des problèmes de normalisation un peu con con du C++.</p>
<p>Le second code est encore plus complexe à comprendre. Il existe 2 fonctions <code>isspace</code>, une dans l’espace de noms <code>std</code> (<a href="https://en.cppreference.com/w/cpp/string/byte/isspace">https://en.cppreference.com/w/cpp/string/byte/isspace</a>) et l’autre qui est dans l’espace de noms global (<a href="https://en.cppreference.com/w/c/string/byte/isspace">https://en.cppreference.com/w/c/string/byte/isspace</a>). C’est un reliquat du C. La version avec <code>std</code> ne peut pas être utilisé directement (cf la doc, c’est expliqué). Il faut comprendre que le <code>using namespace std</code> ne dit pas au compilateur "utilise la version avec std" mais dit "tu peux aussi regarder dans std si tu trouves cette fonction". Avec <code>using namespace std</code>, le compilateur va donc trouver les 2 fonctions et ne saura pas laquelle utiliser. Sans le <code>using namespace std</code>, il ne trouve qu’une version la fonction et c’est bon.</p>
<p>C’est un exemple concret de pourquoi on déconseille les <code>using namespace</code> : pour éviter les conflits de noms.</p>
<p>Une autre solution est d’écrire explicitement que tu veux l’une des fonctions. Par exemple :</p>
<div class="hljs-code-div hljs-code-cpp"><pre><code class="hljs language-cpp"><span class="hljs-keyword">auto</span> deb { std::<span class="hljs-built_in">find_if_not</span>(std::<span class="hljs-built_in">begin</span>(text), std::<span class="hljs-built_in">end</span>(text), ::isspace)};
</code></pre></div>
<p>Je suis pas sur de comprendre pourquoi ce code est accepté sur msvc.</p>
<p>Mais tu touche l’un des problèmes de l’apprentissage du C++ : il y a une complexité inutile du fait de l’histoire du C++, des différents compilateurs, de la norme parfois étrange, des options par défaut, etc.</p>
<p>Mon conseil est juste de continuer avec l’éditeur qui te convient le plus, pour ton apprentissage. Et quand tu seras sur du code pro, d’utiliser des outils de build auto pour garantir la qualité du code. </p>Visual Studio et Visual Studio Code comportement différent pour le même code, message #2458892022-10-14T01:56:02+02:00Kev_k/@Kev_khttps://zestedesavoir.com/forums/sujet/16525/visual-studio-et-visual-studio-code-comportement-different-pour-le-meme-code/?page=1#p245889<p>Salut à tous et toutes :), </p>
<p>Je débute en programmation et j’aimerais avoir vos avis et par la même occasion poser un problème.</p>
<p>Pour coder j’utilise visual studio d’une part et visual studio code d’une autre part à fin de faire des comparaisons et, voire ce qui est mieux. Pour le moment je ne suis pas encore fixé et prendre une décision devient avec le temps de plus en plus difficile, car les deux ont parfois pour le même code des comportements différents. J’aimerais donc savoir quel serait selon vous le mieux adapté.</p>
<p>Par différence de comportement, je veux souligner le fait que pour le même code visual studio Code me renvoie des erreurs ou avertissements et visual studio pas. Voici quelques exemples et j’aimerais savoir comment résoudre ces problèmes.</p>
<ul>
<li>Pour le code suivant VS Code me renvoie un message d’avertissement alors que visual studio non. En modifiant les niveaux des erreurs à signaler dans visual studio, je réussis à avoir un avertissement pour la ligne 4, mais pas pour la 5.</li>
</ul>
<div class="hljs-code-div hljs-code-cpp"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span></div><pre><code class="hljs language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><iostream></span></span>
<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span>{
std::cout << <span class="hljs-string">"C:\Program Files (x86)"</span> << std::endl;
std::cout << <span class="hljs-string">'ab'</span> << std::endl;
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre></div>
<ul>
<li>Pour le code suivant le <code>find_if_not </code>des ligne 10 a 13 n’est pas reconnu dans VS Code mais celui de la ligne 16 ci.le message d’erreur est <code>no matching function for call to 'find_if_not(std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, <unresolved overloaded function type>)'</code>. En enlevant la ligne <code>using namespace std;</code>, l’erreur disparait. Dans Visual Studio, avec ou sans la ligne <code>using namespace std;</code> je ne recois pas d’erreur.</li>
</ul>
<div class="hljs-code-div hljs-code-cpp"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span></div><pre><code class="hljs language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><iostream></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><string></span> </span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><array></span> </span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><algorithm></span> </span>
<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> std;
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span>{
std::string text{<span class="hljs-string">"Text avec espace. "</span>};
<span class="hljs-keyword">auto</span> deb { std::<span class="hljs-built_in">find_if_not</span>(std::<span class="hljs-built_in">begin</span>(text), std::<span class="hljs-built_in">end</span>(text),isspace)};
<span class="hljs-keyword">auto</span> fi { std::<span class="hljs-built_in">find_if_not</span>(std::<span class="hljs-built_in">rbegin</span>(text), std::<span class="hljs-built_in">rend</span>(text),isspace)};
std::string::iterator deb1 { std::<span class="hljs-built_in">find_if_not</span> (std::<span class="hljs-built_in">begin</span>(text), std::<span class="hljs-built_in">end</span>(text),isspace)};
std::string::iterator fi1 { std::<span class="hljs-built_in">find_if_not</span> (std::<span class="hljs-built_in">begin</span>(text), std::<span class="hljs-built_in">end</span>(text),isspace)};
std::array<<span class="hljs-keyword">int</span>,5> foo = {<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>};
std::array<<span class="hljs-keyword">int</span>,5>::iterator ita { std::<span class="hljs-built_in">find_if_not</span> (foo.<span class="hljs-built_in">begin</span>(), foo.<span class="hljs-built_in">end</span>(), [](<span class="hljs-keyword">int</span> i){<span class="hljs-keyword">return</span> i%<span class="hljs-number">2</span>;} )};
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre></div>
<ul>
<li>Pour le code suivant, dans VS Code je reçois l’erreur <code>'const' qualifiers cannot be applied to 'int&'</code>à cause de la ligne 8. Dans Visual Studio par contre non. Ici je suis très perturbé car je cherche a créer une référence constante sur un entier. Si je ne me trompe pas il faut lire de la droite vers la gauche. Ce qui selon moi devrait donner pour & const une référence constante et cela associé a int, une référence constante sur un entier. </li>
</ul>
<div class="hljs-code-div hljs-code-cpp"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span></div><pre><code class="hljs language-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><iostream></span></span>
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span>{
<span class="hljs-keyword">int</span> entier{ <span class="hljs-number">40</span> };
<span class="hljs-keyword">int</span>& reference_entier{ entier };
reference_entier += <span class="hljs-number">2</span>;
<span class="hljs-keyword">int</span> <span class="hljs-keyword">const</span> entier_constant{ <span class="hljs-number">0</span> };
<span class="hljs-keyword">int</span> <span class="hljs-keyword">const</span>& reference_const_entier_constant{ entier_constant };
<span class="hljs-keyword">int</span>& <span class="hljs-keyword">const</span> ref{ entier };
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre></div>
<p>Je tiens à ajouter que mes projets sous Visual Studio 2019 sont paramétrés comme indiqué dans ce cours : <a href="https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/le-debut-du-voyage/5210_le-minimum-pour-commencer/#visual-studio-community">https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/le-debut-du-voyage/5210_le-minimum-pour-commencer/#visual-studio-community</a>. Pour visual studio code j’utilise le compilateur minGW W64 version 12.2.0.</p>
<p>Merci pour votre temps et en avance pour vos retours.</p>
<p>Kev_k</p>Paramètrages Visual Studio Code, message #2330632021-04-07T12:53:21+02:00duncan/@duncanhttps://zestedesavoir.com/forums/sujet/15226/parametrages-visual-studio-code/?page=1#p233063<p>Bonjour</p>
<p>J’utilise VSC sous Ubuntu et actuellement j’essaye de comprendre le fonctionnement des ranges et views.</p>
<p>Depuis cette page <a href="https://en.cppreference.com/w/cpp/ranges/split_view">https://en.cppreference.com/w/cpp/ranges/split_view</a></p>
<p>je charge le programme dans VSC, la compilation se passe bien.</p>
<p>Mais VSC signale des erreurs. Je mets une capture d’écran pour que ce soit plus clair.</p>
<p><a href="https://ibb.co/CBMk53m">doc ranges et views</a></p>
<p>ligne 16 </p>
<div class="hljs-code-div hljs-code-bash"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span></div><pre><code class="hljs language-bash"><error-type> split_view
aucune instance du constructeur <span class="hljs-string">"std::ranges::split_view"</span> ne correspond à la liste d<span class="hljs-string">'arguments -- les types d'</span>arguments sont : (const std::initializer_list<int>, const int)C/C++(289)
</code></pre></div>
<p>ou ligne 18</p>
<div class="hljs-code-div hljs-code-bash"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span></div><pre><code class="hljs language-bash">namespace std
aucune instance de fonction surchargée <span class="hljs-string">"std::ranges::distance"</span> ne correspond à la liste d<span class="hljs-string">'arguments -- les types d'</span>arguments sont : (<error-type>)C/C++(304)
</code></pre></div>
<p>Quels réglages puis je faire dans vsc ?</p>[VS Code] Snippet avec variables, message #2191012020-04-16T19:16:29+02:00Damian/@Damianhttps://zestedesavoir.com/forums/sujet/13916/vs-code-snippet-avec-variables/?page=1#p219101<figure><blockquote>
<p>Wow thing.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13916/vs-code-snippet-avec-variables/?page=1#p219055">FDurfee</a></figcaption></figure>
<p>Ce qui veut dire ?</p>[VS Code] Snippet avec variables, message #2190552020-04-16T11:22:09+02:00FDurfee/@FDurfeehttps://zestedesavoir.com/forums/sujet/13916/vs-code-snippet-avec-variables/?page=1#p219055<p>Wow thing. <a href="https://www.liteblue.buzz">liteblue.usps.gov</a></p>[VS Code] Snippet avec variables, message #2189862020-04-15T14:46:24+02:00Damian/@Damianhttps://zestedesavoir.com/forums/sujet/13916/vs-code-snippet-avec-variables/?page=1#p218986<p>Bonjour !</p>
<p>Je voudrais savoir s’il est possible de placer des variables automatiquement dans un snippet ? Ce que j’entends par là c’est la possibilité d’inclure une valeur dans le snippet qui sera placée dans le code généré.</p>
<p>Je vois énormément de cas où ça pourrait me faire gagner du temps.
Ex: en lua pour l’incrémentation (c’est vraiment la raison qui m’a poussée à rédiger ce post)
++var ===> var = var + 1</p>
<p>Bon du coup ça pourrait aller plus loin:
text***10 ===> le texte est imprimé 10x dans l’éditeur</p>
<p>J’utilise VS Code.</p>
<p>Merci d’avance <img src="/static/smileys/smile.png" alt=":)" class="smiley"> </p>