我有两个printf样式的调试日志记录功能(DebuglogfADebuglogfB)。两种操作方式相同,但是其中一个日志记录功能将日志记录级别作为参数,并忽略低级调试消息。

当前,我为每个函数都复制了代码,但是我希望DebuglogfB能够在调试级别足够高的情况下调用DebuglogfA,而不必在DebuglogfB中创建临时缓冲区。

void DebuglogfA( const char *lpszText, ...)
{
    //Initialize variable argument list
    va_list argList;
    va_start(argList, lpszText);

    char buffer[1024];
    unsigned short length = snprintf_s(buffer, 1024, "[%d] ", CTime::GetCurrentTimeInSec() );
    length += vsnprintf (buffer+length, 1024 - length, lpszText, argList );

    LogSend( buffer, length );
}

void DebuglogfB ( const unsigned int level, const char *lpszText, ... )
{
    if( level < 50 ) {
        return; // To low to report.
    }

    //Initialize variable argument list
    va_list argList;
    va_start(argList, lpszText);

    char buffer[1024];
    unsigned short length = snprintf_s(buffer, 1024, "[%d] ", CTime::GetCurrentTimeInSec() );
    length += vsnprintf (buffer+length, 1024 - length, lpszText, argList );

    LogSend( buffer, length );
}

我的问题是:

如何在不为DebuglogfB中的消息创建缓冲区的情况下获取函数DebuglogfB来调用DebuglogfA?

最佳答案

您可以创建一个具有DebuglogfVconst char *lpszText作为参数的新函数va_list argList,然后让DebuglogfADebuglogfB调用它来执行实际的日志记录。

关于c++ - 试图将两个类似的printf样式调试消息合并到一个函数中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6769875/

10-11 19:42