6

次の行に沿って、コードにいくつかのロギング マクロがあります。

#define LOG_MSG (pri, msg, ... ) \
    if (pri > PriorityLevel ) \
        printf( msg, ##\__VA_ARGS__);

LCOV_EXCL_START、LCOV_EXCL_STOP、または LCOV_EXCL_LINE を使用して分岐を抑制できることはわかっています。しかし、これは、LOG_MSG と呼ぶすべての場所に追加した場合にのみ機能します。

LOG_MSG(ERROR, "An Error has occurred\n");//LCOV_EXCL_LINE

そのコメントをマクロに入れたいのですが、入れるとLCOVが認識してくれません。たとえば、このコードは依然として分岐を生成します。

#define LOG_MSG (pri, msg, ... ) \
    if (pri > PriorityLevel ) \
        printf( msg, ##\__VA_ARGS__);//LCOV_EXCL_LINE

マクロ自体でこれらの分岐を抑制する良い方法はありますか?

4

5 に答える 5

1

コードを回答に追加する方法がわかりませんが、これは @ Jarod42 からのソリューションへの回答です。私は C++0x を使用していないので、彼のソリューションを少し変更しました。

void LogMsgFunc( U32 pri, const char* msg, ... )
{
    //LCOV_EXCL_START
    va_list variableArgumentList;
    va_start( variableArgumentList, msg );
    if ( pri <= PriorityLevel ) 
    { 
        vfprintf( stderr, msg, variableArgumentList );
    }    
    va_end( variableArgumentList );
    //LCOV_EXCL_STOP
}

#define LOG_MSG (pri, msg, ... ) \
    LogMsgFunc(pri, msg, ##__VA_ARGS__);
于 2014-01-06T15:25:39.663 に答える