<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_3207"  />
<title>rulinux.net - Форум - Development - мужик предлагает превратить C в C++</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - мужик предлагает превратить C в C++</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>мужик предлагает превратить C в C++</title>
<link>https://rulinux.net/message.php?newsid=3207&amp;page=1#20563</link>
<guid>https://rulinux.net/message.php?newsid=3207&amp;page=1#20563</guid>
<pubDate>Sun, 09 Aug 2009 07:55:08 +0400</pubDate>
<description><![CDATA[<p>Согласен с bugmaker, если переделывать так лучше сразу C++.
А если C не переделывать, то можно взять glib или другой кастыль.</p>]]></description>
</item>
<item>
<title>мужик предлагает превратить C в C++</title>
<link>https://rulinux.net/message.php?newsid=3207&amp;page=1#20562</link>
<guid>https://rulinux.net/message.php?newsid=3207&amp;page=1#20562</guid>
<pubDate>Sat, 08 Aug 2009 16:15:25 +0400</pubDate>
<description><![CDATA[<p>бред какой. Не нравится С - пущай и юзает С++ или ту же Аду. Для чего превращать одно в другое, причём такое же как уже есть.</p>]]></description>
</item>
<item>
<title>мужик предлагает превратить C в C++</title>
<link>https://rulinux.net/message.php?newsid=3207&amp;page=1#20561</link>
<guid>https://rulinux.net/message.php?newsid=3207&amp;page=1#20561</guid>
<pubDate>Sat, 08 Aug 2009 08:53:00 +0400</pubDate>
<description><![CDATA[<p><a href="http://ramlamyammambam.livejournal.com/9318.html">http://ramlamyammambam.livejournal.com/9318.html</a></p><p>Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с tagged-типами языка Ада.</p><p>1) Описание новых структур как дополнение старых:
<fieldset style="border: 1px dashed black; padding:0px;"><ol style="background-color:#3d3d3d;" start="1"><li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   struct foo : bar {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;       ...<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   };<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;Поля новой структуры дописываются в хвост к полям старой структуры. Разрешается неявное преобразование указателя на расширенную структуру к указателю на базовую.<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;2) Описание структур с набором интерфейсных функций:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   struct stream {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;       ...<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   interface:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      void putch (char c);<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      int getch (void);<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      int peekch ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      void flush ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      int eof ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   };<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;В структуре создается скрытое первое поле, указывающее на таблицу указателей на функции:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   struct stream {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      struct {<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;         void (*putch) ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;         int (*getch) ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;         int (*peekch) ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;         void (*flush) ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;         int (*eof) ();<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      } *interface;<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;      ...<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   };<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;3) При определении интерфейсной функции указывается имя соответствующей структуры. Добавляется скрытый аргумент this:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   void putch (char c) : interface struct stream<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   { ... }<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;превращается в:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   void putch (struct stream *this, char c)<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   { ... }<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;4) Вызов интерфейсной функции:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   stream-&gt;putch ('x');<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;}<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;транслируется так:<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;code{<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;   stream-&gt;interface-&gt;putch (stream, 'x');<li style="background-color:#000000; padding-left: 5px; color: gray">&nbsp;</ol></fieldset>
Дело за малым - нужен энтузиаст, готовый хакнуть GCC. :-)</p>]]></description>
</item>
</channel>
</rss>