최근에 (로거 클래스에서 사용되는)이 함수를 발견했습니다. 나는 그것이 무엇을 이해하지만 난 방법을 모르는 : C stdarg 매크로 이해 (va_start ...)
void Reporter::print(const char* szFormat, ...) { // note: m_out is a FILE* va_list args; va_start(args, szFormat); vfprintf(m_out, szFormat, args); va_end(args); }
내가 reference를 읽을 수 있지만 여전히 내게 불분명하다. 가장 큰 괴롭힘은 예상대로 작동하지 않는다는 것입니다. 0보다 큰 숫자와 파일 경로를 출력해야하지만 마지막 숫자는 0이고 문자열은 (null)입니다. 사례 1 :
rep.print("Values: %08X %08X %08X %08X %08X %08X %d %s\n", val1, val2, val3, val4, val5, val6, source.GetLength(), szPath);
// source.GetLength() returns a size_t, szPath is a const char* and IS indeed a valid string
그러나이로 변경하면 잘 작동 :
사례 2 : 내가 ++ 2008 MSVC에서 컴파일하고있어
rep.print("Values: %08X %08X %08X %08X %08X %08X", val1, val2, val3, val4, val5, val6);
rep.print(" %d %s\n", source.GetLength(), szPath);
참고. 동일한 코드가 gcc에서 잘 작동합니다 (첫 번째 경우조차도). Reporter :: print() 또는 함수를 사용하는 방식의 버그가 있습니까? 첫 번째 경우처럼 호출해도 제대로 작동하는지 어떻게 확인할 수 있습니까? 왜 실패 하는가?
MSVC의 버그라고 추측합니다. –
모든 val 변수는 어떤 유형입니까? – JeremyP
그들 모두는'unsigned long'의 – PeterK