의심 할 여지없이 명백한 버그입니다.
경고의 의도는 프로그램의 모든 부서에 대해 경고하지 않기위한 것입니다. 그것은 합리적인 프로그램에서 너무 시끄러운 것입니다. 대신, 당신이 인수를 확인해야 할 때 경고 할 의도가 있습니다. 이 경우 인수를 확인했습니다. 따라서 컴파일러는이를 지적하고 종료해야합니다.
이러한 기능의 기술적 인 구현은 코드 분기의 변수에 특정 속성을 지정하여 수행됩니다. 가장 일반적인 속성 중 하나는 3 상태 "Is null"입니다. 지점 이전에 arg
은 외부 변수이고 arg [[Isnull]]
은 알 수 없습니다. 그러나 arg
에 대한 점검 후에 두 가지가 있습니다. 첫 번째 지점에서 arg [[Isnull]]
이 true입니다. 두 번째 지점에서 arg [[Isnull]]
은 거짓입니다.
이제 0으로 나누기 및 null 포인터 경고를 생성 할 때는 [[IsNull]
특성을 확인해야합니다. 사실이라면 심각한 경고/오류가 있습니다. 알 수없는 경우 컴파일러가 증명할 수있는 것 이상의 잠재적 인 문제점 인 위에 표시된 경고를 생성해야합니다. 그러나이 경우 [[isNull]]
특성은 False입니다. 인간과 동일한 형식 논리에 의한 컴파일러는 위험이 없음을 알고 있습니다.
하지만 컴파일러에서 내부적으로 [[Isnull]]
속성을 사용한다는 것을 어떻게 알 수 있습니까? 첫 단락을 상기 해보십시오 : 그것 없이는 항상 또는 결코 경고해야합니다. 때로는 경고 메시지가 표시되며 [[IsNull]]
속성이 있어야합니다.
평등에 대해 "이중"인수를 비교하는 데주의하십시오. 사악한 마법이 거기에서 발생합니다 ... – SadSido
아니요. 완벽하게 정의 된 프로세스. 특히 '0.0 == -0.0'. 그러므로'1./arg'가 정의 된 모든 값 집합에 대해 우리는'arg! = 0.0'을 알고 있습니다. – MSalters
@MSalters : 그러나 반올림 오류로 인해 arg는 0.0 (또는 그 문제에 대해 -0.0)이 될 수 있습니다. – jalf