c++ - Can I return early from a variable-argument function? -
suppose have 2 c++ functions debug output:
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 format string ::outputdebugstringw( buffer ); } the above uses win32 outputdebugstringw(), doesn't matter. want optimize formatting when there's no debugger attached formatting not done (i measured - speedup significant):
void trace( const wchar_t* format, ... ) { if( !isdebuggerpresent() ) { return; } //proceed va_list args; ..... } will fact return once isdebuggerpresent() returns null affect except formatting skipped?
i mean no longer call va_start , va_end - matter? skipping va_start , va_end cause unexpected behavior changes?
the requirement on return if have used (executed) va_start(), must use va_end() before return.
if flout rule, you'll away on systems, system somewhere needs va_end(), don't risk omitting it. undefined behaviour omit it.
other rule, how handle return. proposed return not problem.
Comments
Post a Comment