내가 최근 NSLog에서이 이상한 행동 (...) 추적 30 분을 낭비 :NSLog (...) 부적절한 형식 지정자가 다른 변수에 영향을 줍니까?
NSString *text = @"abc";
long long num = 123;
NSLog(@"num=%lld, text=%@",num,text); //(A)
NSLog(@"num=%d, text=%@",num,text); //(B)
라인 (A)는 예상 "NUM = 123, 텍스트 = ABC"하지만 행을 인쇄를 (B)는 "num = 123, text = (null)"을 인쇄합니다.
분명히 long long
을 %d
으로 인쇄하는 것은 실수이지만, 누군가 text
이 null로 인쇄되는 이유를 설명 할 수 있습니까?
-Wall 옵션으로 컴파일하면 컴파일러에서 이와 같은 문제에 대해 경고합니다. 경고가 항상 빌드를 깨뜨릴 수 있도록 -Werror도 강력히 권장합니다. –
@Adam Rosenfield, ala'-Wformat'와 같은 형식 검사를 지원하는 메모는 gcc/objc에서 항상 조금 헷갈 렸습니다. 이것은 컴파일러의 최신 버전에서 더 좋아지고있는 것처럼 보입니다. 그러나 Xcode 3.1에서 빠른 체크를했고 위의 오류를 포착하지 않았습니다. – johne
-Wformat는 C 문자열 (printf와 같은)에서만 작동하고 NSString * 객체 상수 (NSLog가 사용하는)를 완전히 파싱 할 수 없으므로 오류를 포착하지 않습니다. –