<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; gcc & g++]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=8299&amp;type=atom" />
	<updated>2010-11-14T17:07:50Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=8299</id>
		<entry>
			<title type="html"><![CDATA[Re: gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112945#p112945" />
			<content type="html"><![CDATA[<p><strong>zhevak</strong>, </p><div class="quotebox"><cite>zhevak пишет:</cite><blockquote><p>int x;<br />int y;</p><p>x = 3;<br />y = x++ + ++x;</p></blockquote></div><p>вообще-то, как модератор я Вас забанить за такой код <strong>обязан</strong>.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2010-11-14T17:07:50Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112945#p112945</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112880#p112880" />
			<content type="html"><![CDATA[<p><strong>zhevak</strong>, <br />Вопрос: чему будет равно значение y?<br />10</p>]]></content>
			<author>
				<name><![CDATA[Hvzh]]></name>
			</author>
			<updated>2010-11-14T14:10:49Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112880#p112880</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112329#p112329" />
			<content type="html"><![CDATA[<p>напрягает не разное поведение программ, и даже не обстоятельство не знания топикстартером потоковых форматов, а то, что при очень &quot;хорошем&quot; типе <strong>double</strong> такая большая ошибка округления. Я бы еще понял, если б это был <strong>float</strong>, но <strong>double</strong> ... <img src="https://linuxforum.ru/img/smilies/ac.gif" alt="ac" /></p><p>хех. Понеслась!<br />1. Допишите модификатор <strong>volatile</strong> в объявлении переменной <strong>i</strong>. Таким образом компилятор не будет размещать переменную в регистрах математического сопроцессора, а создаст ее (т.е. зарезервирует для нее место) в памяти.<br />2. Создайте еще одну переменную -- указатель на байт (<strong>unsigned char *</strong>), присвойте ей адрес переменной <strong>i</strong> с предварительной кастомизацией типа.<br />3. Переменная <strong>i</strong> занимает 8 байт. Выведите их в консоль. Сравните что у Вас лежит в памяти в случае с Си, а что в случае с Си++, когда <strong>i</strong> должна быть равна нулю.</p>]]></content>
			<author>
				<name><![CDATA[zhevak]]></name>
				<uri>https://linuxforum.ru/profile.php?id=9718</uri>
			</author>
			<updated>2010-11-12T16:29:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112329#p112329</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112308#p112308" />
			<content type="html"><![CDATA[<p>если по теме.... то в printf задается форматирование..... замените на </p><div class="codebox"><pre><code>std::cout &lt;&lt;std::fixed&lt;&lt; i &lt;&lt; std::endl;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[odin]]></name>
				<uri>https://linuxforum.ru/profile.php?id=7138</uri>
			</author>
			<updated>2010-11-12T15:44:31Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112308#p112308</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112304#p112304" />
			<content type="html"><![CDATA[<p>Во первых, это два разных языка, а не диалект одного. Во вторых, это два разных компилятора. В третьих, у них разные парадигмы ввода/вывода. ... Разные библиотеки, разные люди, писавшие коды этих библиотек и т.д. и т.п. Требовать одного и того же поведения на заграничных условиях (т.е. там, где не действуют стандарты языка) от разных инструментов -- ну, согласитесь -- глупо!</p><p>Это хорошо, что вы увидели такое аномальное поведение, но заморачиваться на этом не стоит. Просто примите это как есть, и помните об этой фиче.</p><p>Хотите еще пример? Извольте! Имеем два языка -- C/C++ и C#. (В данном случае С и С++ в одной категории.)<br />имеем рабочий, но сомнительный код. (Сомнительный -- в том плане, что такое написание крайне не рекомендуется.)</p><p>int x;<br />int y;</p><p>x = 3;<br />y = x++ + ++x;</p><p>Вопрос: чему будет равно значение y?</p>]]></content>
			<author>
				<name><![CDATA[zhevak]]></name>
				<uri>https://linuxforum.ru/profile.php?id=9718</uri>
			</author>
			<updated>2010-11-12T15:34:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112304#p112304</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[gcc & g++]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=112291#p112291" />
			<content type="html"><![CDATA[<p>Имеется код на C и C++<br /></p><div class="codebox"><pre><code>/*c.c*/
#include &lt;stdio.h&gt;

int main()
{
   double i;
   for (i=-0.4; i&lt;=0.4; i+=0.1) printf(&quot;%.1f\n&quot;,i);
   return 0;
}</code></pre></div><br /><div class="codebox"><pre><code>/*cpp.cpp*/
#include &lt;iostream&gt;
int main()
{
    for (double i=-0.4; i&lt;=0.4; i+=0.1) 
        std::cout &lt;&lt; i &lt;&lt; std::endl;
    return 0;
}</code></pre></div><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ gcc c.c -o c<br />$ g++ cpp.cpp -o cpp<br />$ ./c<br />-0.4<br />-0.3<br />-0.2<br />-0.1<br />-0.0<br />0.1<br />0.2<br />0.3<br />0.4<br />$ ./cpp <br />-0.4<br />-0.3<br />-0.2<br />-0.1<br />-2.77556e-17<br />0.1<br />0.2<br />0.3<br />0.4<br /></div></p><p>я понимаю, что чистого нуля тут не получается из за представления числа 0.1 в двоичной системе. Но почему на C выводит 0, а на С++ нет? Различия в оптимизации или что? Кто может объяснить мне это?</p>]]></content>
			<author>
				<name><![CDATA[LifeIsMusic]]></name>
				<uri>https://linuxforum.ru/profile.php?id=12494</uri>
			</author>
			<updated>2010-11-12T14:44:36Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=112291#p112291</id>
		</entry>
</feed>
