1

次のマクロがあります。

#define TRACE__LOW(str, col, ...)\
        TR_Trace("\r\e[" COLOR(col) "%s :: %s():%d; LOW - " str "\e[0m\r\n",\
        ##__VA_ARGS__);

関数TR_Traceは次のようになります。

void TR_Trace(const char *const string, ...)
{
   va_list aptr;
   size_t stringSize = 0;
   char tempString[250];

   va_start(aptr, string);
   vsprintf(tempString, string, aptr);
   va_end(aptr);
}

そして、私はそれを次のように使用しています:

TRACE__LOW("Led[%d] toggled every %d milliseconds (%5d)", GREEN
            init_parameters.led, delay_time, counter++);

ここでの問題は、実行がvsprintf(tempString, string, aptr); に達するとです。そこに引っかかる。

何が起こっているのか、またはVA_ARGSを正しく使用していない場合、誰かが知っていますか?

よろしく。

4

2 に答える 2

4

フォーマット文字列に追加%s :: %s():%d;しますが、これらのパターンを満たすために余分な引数を追加しないでください。

という意味だったと思います

#define TRACE__LOW(str, col, ...)\
        TR_Trace("\r\e[" COLOR(col) "%s :: %s():%d; LOW - " str "\e[0m\r\n",\
        __FILE__, __func__, __LINE__,\
        ##__VA_ARGS__);
于 2014-03-14T03:55:44.223 に答える