MAX (2, x)로 정의 된 정수 중 하나가 발견되기 전에 잠시 디버깅했습니다. 2가 분명히 -4보다 클 경우에도 -4를 반환합니다.중첩 된 MAX는 때때로 다양한 객체 유형을 사용할 때 가장 작은 값을 반환합니다. MAX (a, MAX (b, c))
불규칙성을 처음으로 경험할 수 있도록 내 코드가 실행되는 단순화 된 버전입니다.
NSLog(@"a) %i", (int)MAX(2,-4));
NSString *aString = @"90586381095716439405631195482586763570805293418319186736659080000000000000";
int aNumber = (int)MAX(2,10-MAX(1,(aString.length/5)));
NSLog(@"b) %i", aNumber);
NSLog(@"c) %i", (int)MAX(2,10-MAX(1,16)));
a)는 예상대로 2를 기록 할 것이다.
b) 로그에 -4가 나와 나에게 의미가 없습니다.
C)가 예상대로 2를 기록합니다 (현재 B 내가지고 있지 않다 무엇을 나에게 더 적은 의미)
한다? MAX는 xCode에서 갈색이므로 UIKit 또는 수학 라이브러리의 CLAN으로 설정되었다고 생각하게합니다. 아마도 MAX가 처리 된 후에 내부 MAX가 처리되기 때문에 MAX가 중첩되면 이상한 버그가 발생합니다. 그러나 만약 그렇다면 c)도 기록하지 않았을 것입니까 -4?
와우 네가 맞아, string.length에'(int) '를 주조하면 문제가 해결된다. '(int) aString.length' 그리고 또한 c)'(NSUInteger)'를 호출합니다. 이것은'.length가 무엇인지,'16'이 문제를 재현했습니다. 그래서 MAX는'NSUInteger'를 처리하는 데 문제가 있습니다. 흥미 롭습니다. –
@AlbertRenshaw : 정말 MAX와 아무 관련이 없습니다. 문제는 빼기입니다. 부호없는 값을 빼고 언더 플로우를 원하지 않으면 빼기 전에 값을 확인해야합니다. –
반드시 MAX를 적용하기 전에 값을 확인하면 문제가 해결됩니다. MAX (b, c)를 정수 "d"로 정의한 다음 MAX (a, d)를 수행하면 a가 반환됩니다. NSUinteger가 관련되어있을 때 MAX를 처리하는 논리에 문제가있는 것 같습니다. 손에 넣기 전에 NSUinteger를 처리하고 max에 두거나 (또는 이전에 값을 확인한 다음 최대 값으로 두는 것)이 문제를 방지합니다. Hmm –