8

전 처리기로 인해 발생하는 문제에 대해 "연결할 수없는 코드"경고가 표시되지 않도록하는 방법을 찾고 있습니다. 예 : 은 모든 경고를 억제하고 싶습니다. 예를 들어 전 처리기에 의존하는 경고 만 억제하고 싶습니다.프리 프로세서 종속 코드에 대한 "연결할 수없는 코드"경고 피하기

#if WINDOWS 
    public const GamePlatform platform = GamePlatform.PC; 
#else 
    public const GamePlatform platform = GamePlatform.MAC; 
#endif 

그리고 나중에가는 코드가있다 : 두 섹션

if (platform == GamePlatform.PC) 
{ 
    ... 
} 
else 
{ 
    ... 
} 

하나는 항상 "도달 할 수없는 코드"로 감지, 우리는 사방에 사람들을 가지고는. 내가 만드는 많은 경고를 없애려고하지만, 여전히 에 대한 경고를 받고 싶습니다. 도달 할 수없는 코드. 실제로 플랫폼이 두 가지가 넘는 플랫폼이 있으므로 각 플랫폼 별 코드는 불필요한 경고를 쌓아 둡니다.

+1

이 질문을 참조하십시오. http://stackoverflow.com/questions/1930793/is-there-a-way-to-get-vs2008-to-stop-warning-me-about-unreachable-code/1930840#1930840 특히 Jason Down의 대답을 살펴보십시오. –

+0

다른 질문을 먼저 찾았으므로이 문제와 관련하여 전처리기를 특별히 다루는 것을 보지 못했습니다. (도달 할 수없는 코드와 관련하여 많은 질문이 있지만 확인한 코드 중 어느 것도 동일한 시나리오 인 것 같지 않습니다.)이 코드를 다루는 방법이 없다는 것을 짜증나게하는 것은 코드를 크게 괴롭히지 않고 성능을 떨어 뜨립니다 약간) 또는 잠재적으로 유용한 경고를 숨길 수 있습니다. –

답변

8

옵션 1 : if 문이있는 모든 위치에 전 처리기 매크로를 추가하십시오. 이것은 더 성능이 좋지만 어쩌면 조금 더 어색 할 것입니다.

옵션 2 : 플랫폼 변수를 const가 아니게 만드십시오. 정적으로 읽기 전용으로 설정하면 경고가 사라집니다.

+0

그러나 "옵션 2"를 사용하면 컴파일러는 IL의 "섹션"또는 "분기"를 모두 IL로 변환해야하며 IL의 많은 부분이 사용되지 않으므로 하나의 종류의 낭비입니다 DLL 파일의 크기에 신경 쓰지 않는다면). –

+0

옵션 2가 아마도 내가하는 일이 아니라는 것에 동의하지만, 가장 쉽고 때로는 중요합니다. "도달 할 수없는 코드"는 일리노이로 변환되지 않으므로 정적 읽기 전용으로 변경하면 현재의 상황보다 "악화"되며 옵션 1은 경고를 뺀 것과 동일합니다. – lukegravitt

+0

흠, 추악한 코드와 약간 더 느린 코드의 영원한 딜레마 - 나는 옵션 1과 함께해야한다는 것을 알고 있지만 전처리 된 코드를 오염시키는 것을 정말 싫어합니다. 읽을 수 없게 만듭니다. 또한, 컴파일러가 무시하기 때문에'#defined'가 변경되었을 때만 나타나게 될 비활성 코드 블록에 잘못된 코드가있을 수 있습니다 ... –