<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: макрос для конкатенации строк</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7702.html</link>
    <description>Всем привет,&lt;br&gt;&lt;br&gt;мне нужно генерировать строковые литералы из 2-х составляющих для дальнейшего использования их в printf, или puts. Наваял вот такой макрос, склеивающий строки:&lt;br&gt;&lt;br&gt;#define PASTE(a, b)   a##b&lt;br&gt;&lt;br&gt;puts(PASTE(&quot;abc&quot;, &quot;def&quot;));&lt;br&gt;&lt;br&gt;Вываливается с ошибкой:&lt;br&gt;&lt;br&gt;error: pasting &quot;&quot;abc&quot;&quot; and &quot;&quot;def&quot;&quot; does not give a valid preprocessing token&lt;br&gt;&lt;br&gt;Почему не воспринимаются эти токены, что не нравится препроцессору? Вообще может быть есть какой-то более правильный способ для моей задачи?&lt;br&gt;&lt;br&gt;PS. Если макрос переделать вот так:&lt;br&gt;&lt;br&gt;#define PASTE(a, b)     #a#b&lt;br&gt;&lt;br&gt;то все компилируется отлично, но строка выводится в таком виде, что и понятно:&lt;br&gt;&lt;br&gt;&quot;abc&quot;&quot;def&quot;&lt;br&gt;&lt;br&gt;Мне бы хотелось так:&lt;br&gt;&lt;br&gt;abcdef&lt;br&gt;</description>

<item>
    <title>макрос для конкатенации строк (cruz)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7702.html#3</link>
    <pubDate>Tue, 18 Nov 2008 01:29:39 GMT</pubDate>
    <description>&amp;gt;Помедитируйте над следующим кодом и над тем, что выдаёт эта программа. &lt;br&gt;&amp;gt;&#091;code&#093; &lt;br&gt;&amp;gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;#define A(a, b) a##b &lt;br&gt;&amp;gt;#define B(a, b) (a b) &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;Чтобы gcc с максимально поднятым уровнем ворнингов был счастлив, лучше сделать так:&lt;br&gt;&lt;br&gt;int main(void)&lt;br&gt;&#123;&lt;br&gt;  const char *abcd = &quot;hello&quot;;&lt;br&gt;  ...&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&amp;gt;int main() &lt;br&gt;&amp;gt;&#123; char *abcd = &quot;hello&quot;; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;  printf(&quot;&#037;s&#092;n&quot;, A(ab, cd)); &lt;br&gt;&amp;gt;  printf(&quot;&#037;s&#092;n&quot;, B(&quot;ab&quot;, &quot;cd&quot;)); &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;  return 0; &lt;br&gt;&amp;gt;&#125; &lt;br&gt;&amp;gt;&#091;/code&#093; &lt;br&gt;&lt;br&gt;Типичный набор параметров компилятора, который я применяю ежедневно:&lt;br&gt;&lt;br&gt;-ansi -pedantic -W -Wall -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations  -Winline -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wconversion -Wwrite-strings -ffloat-store -fno-common -O0&lt;br&gt;</description>
</item>

<item>
    <title>макрос для конкатенации строк (jd2)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7702.html#2</link>
    <pubDate>Mon, 17 Nov 2008 16:32:53 GMT</pubDate>
    <description>Помедитируйте над следующим кодом и над тем, что выдаёт эта программа.&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;#define A(a, b) a##b&lt;br&gt;#define B(a, b) (a b)&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;&#123; char *abcd = &quot;hello&quot;;&lt;br&gt;&lt;br&gt;  printf(&quot;&#037;s&#092;n&quot;, A(ab, cd));&lt;br&gt;  printf(&quot;&#037;s&#092;n&quot;, B(&quot;ab&quot;, &quot;cd&quot;));&lt;br&gt;&lt;br&gt;  return 0;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>макрос для конкатенации строк (Andrey Mitrofanov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7702.html#1</link>
    <pubDate>Mon, 17 Nov 2008 08:37:54 GMT</pubDate>
    <description>&amp;gt;может быть есть какой-то более правильный способ для моей задачи?&lt;br&gt;&lt;br&gt;Всё может быть. Напимер, генерировать файл с нужными тебе строками из исходного вида (не обязательно Си) - в &quot;готорый&quot; Си &quot;механически&quot;, но другим &quot;препроцессором&quot;. Шел, сед, оук, перл, руби, питон и т.д.&lt;br&gt;&lt;br&gt;&amp;gt;Мне бы хотелось так: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;abcdef &lt;br&gt;&lt;br&gt;В те далёкие &#037;)) времена, когда я писал на Си, строки-константы и так &quot;клеились&quot;, вроде -&lt;br&gt;&lt;br&gt;puts(&#092;&lt;br&gt;&quot;Usage: superpuper &amp;lt;args&amp;gt;...&#092;n&#092;n&quot;&#092;&lt;br&gt;&quot;  args - any number of file names or options&quot;);&lt;br&gt;</description>
</item>

</channel>
</rss>
