2012-11-13 5 views
7

나는 내 맥 OS X 응용 프로그램에서 다음 코드 줄이 있습니다NSLog 나에게 정정하지 않은 경고를주는

NSLog(@"number of items: %ld", [urlArray count]); 

을 그리고 난 경고를 얻을 : "형식은 '긴'유형을 지정하지만 인수가 입력있다 'NSUInteger'

그러나, 나는 내 코드를 변경하는 경우 (일명 '부호 INT')는 "

,369 :

NSLog(@"number of items: %u", [urlArray count]); 

나는 경고를

형식은 '부호 INT'를 입력 지정하지만 인수는

그래서 나는이

NSLog(@"number of items: %u", [urlArray count]); 

로 변경 (일명 '부호없는 긴') 'NSUInteger'를 입력 가지고 있지만 나는 경고를 얻을 : 형식 지정을 'unsigned long'을 입력했지만 인수에 'NSUInteger'(일명 'unsigned int') 유형이 있습니다.

경고를 생성하지 않도록 NSLog를 어떻게 설정할 수 있습니까? Xcode의 제안을 따르는 경우 형식 지정자를 변경하는 끝없는 반복문에 들어가지만 경고는 사라지지 않습니다.

답변

14

그래, 이건 짜증나. 내가 믿는 32/64 비트입니다. 가장 쉬운 것은 단지 길이에 캐스팅 : 범용 애플리케이션을위한

portability guide
NSLog(@"number of items: %lu", (unsigned long)[urlArray count]); 
6

이 경우 캐스팅하는 것이 좋습니다.

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]); 
+0

그러나이 경고 정리한다. – Jackson

+3

차이가 있는지는 확실하지 않지만 형식 지정자와 동일한 유형이어야합니다. 그래서 (unsigned long) % lu이거나 (long) % ld –

+0

@darren이 될 것입니다. 그렇게하지 않으면 정의되지 않은 동작입니다. –