<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: va_list, va_start и вызов из foo1(p, ...)  foo2(p, ...)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/9289.html</link>
    <description>Есть функция mkmsg(), принимающая переменное число параметров. Что-то вроде такой:&lt;br&gt;&lt;br&gt;char *mkmsg(char *fmt, ...) &#123;&lt;br&gt;&lt;br&gt;   char str&#091;NAME_MAX+1&#093;;&lt;br&gt;   va_list ap;&lt;br&gt;   ...&lt;br&gt;   va_start(ap, fmt);&lt;br&gt;   vsnprintf(str, NAME_MAX, fmt, ap);&lt;br&gt;   va_end(ap);&lt;br&gt;   ...&lt;br&gt;   return strdup(str);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Всем хороша, только вот каждый раз перед ее вызовом приходится дергать free() для предыдущего вызова, типа так:&lt;br&gt;char *msg;&lt;br&gt;...&lt;br&gt;strlen(msg = mkmsg(&quot;msg1&quot;));&lt;br&gt;free(msg);&lt;br&gt;strlen(msg = mkmsg(&quot;msg2&quot;));&lt;br&gt;&lt;br&gt;решил написать обертку, типа такой:&lt;br&gt;&lt;br&gt;char *mkmsg2(char *msg, char *fmt, ...) &#123;&lt;br&gt;&lt;br&gt;   char *str;&lt;br&gt;   va_list ap;&lt;br&gt;   ...&lt;br&gt;   if (msg)&lt;br&gt;      free(msg);&lt;br&gt;&lt;br&gt;   str = &amp;lt;а тут хочу вызвать оригинальную mkmsg() и передать ей остальные параметры&amp;gt;&lt;br&gt;&lt;br&gt;   return str;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Подскажите, плз., как тут выкрутиться не переписывая mkmsg() &lt;br&gt;&lt;br&gt;</description>

<item>
    <title>va_list, va_start и вызов из foo1(p, ...)  foo2(p, ...) (shadowmaan)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/9289.html#1</link>
    <pubDate>Thu, 17 Nov 2011 06:37:25 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;    char *str; &lt;br&gt;&amp;gt;    va_list ap; &lt;br&gt;&amp;gt;    ...&lt;br&gt;&amp;gt;    if (msg) &lt;br&gt;&amp;gt;       free(msg); &lt;br&gt;&amp;gt;    str = &amp;lt;а тут хочу вызвать оригинальную mkmsg() и &lt;br&gt;&amp;gt; передать ей остальные параметры&amp;gt; &lt;br&gt;&amp;gt;    return str; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; Подскажите, плз., как тут выкрутиться не переписывая mkmsg() &lt;br&gt;&lt;br&gt;Как вариант, вместо функции mkmsg2 можно использовать макрос&lt;br&gt;&lt;br&gt;#define mkmsg2(msg, fmt, ...) ( ... проверка/очистка msg ... mkmsg(fmt, __VA_ARGS__) ... )&lt;br&gt;&lt;br&gt;http://en.wikipedia.org/wiki/Variadic_macro&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
