Предположим, у меня есть две функции C ++ для вывода отладки:
void Trace( const wchar_t* format, ... )
{
va_list args;
va_start( args, format );
VarArgTrace( format, args );
va_end( args );
}
void VarArgTrace( const wchar_t* format, va_list args )
{
WCHAR buffer[1024];
//use ::_vsnwprintf_s to format the string
::OutputDebugStringW( buffer );
}
вышеупомянутый использует Win32 OutputDebugStringW()
, но это не имеет значения. Теперь я хочу оптимизировать форматирование, чтобы при отсутствии отладчика форматирование не выполнялось (я измерял - ускорение значительно):
void Trace( const wchar_t* format, ... )
{
if( !IsDebuggerPresent() ) {
return;
}
//proceed as previously
va_list args;
.....
}
Повлияет ли тот факт, что я вернусь рано после того, как IsDebuggerPresent()
вернет null, повлияет на что-нибудь, кроме того, что форматирование будет пропущено?
Я имею в виду, я больше не звоню va_start
и va_end
- будет ли это иметь значение? Будет ли пропуск va_start
и va_end
вызывать неожиданные изменения поведения?