2009-06-10 2 views
2

나는 방금 C4244 경고 (데이터 손실 가능성)가 표시되지 않는다는 것을 발견했습니다. 나는 강력하게 의심스러운 MS 헤더가이 경고를 억제하고 헤더를 포함하는 모든 번역 단위에 대해 표시하지 않는 것으로 의심하지만 무수한 헤더가 잘못되었을 수 있음을 확인하지 못했습니다.VC++ 컴파일러 : 현재 경고 수준을 결정하거나 재정의하는 방법은 무엇입니까?

다른 프로그래밍 문제와 마찬가지로 이진 검색을 수행하여 현재의 경고 수준을 인쇄하고 가능한 경우 기본 Pre Compiled Header의 경고가 표시되지 않도록하고 싶습니다.

누구에게 어떤 컴파일러 지시문을 사용할 수 있는지, 또는 내가 취할 수있는 접근 방법이 그 정보를 제공 할 수 있는지 알고 있습니까?

발신자가 계약을 위반하고 서명 된 바이트 대신 정수를 보내려고 할 때 컴파일러 경고를 내 헤더에서 작성한 타입 선언이 실패하고 있다는 것을 얼마나 불쾌한지 말할 수 없습니다. 내가 해결하려고하는 현재의 버그로 이끌었다).

생각하십니까?

참고 : (기본값 : XXXX)의 #pragma 경고 다음 : (XXXX 해제) 내 전체 솔루션을 통해의 #pragma에

검색은 경고의 #pragma의 균형 선언을 마련. 그리고 그 중 아무 것도 참조 4244.

전체 솔루션에서 4244의 검색은 일치하는 항목을 반환하지 않습니다. (경고를 무시하거나 포함 된 라이브러리, 하위 프로젝트 등을 수행하지 않습니다.)

전체 MS 경로를 포함하는 4244의 검색 경로는 몇 가지 참조를 반환합니다. 이 호출되기 전에 설정된 #define 심볼에 따라 균형을 이루거나 거의 일치합니다. 따라서 MS가 잘못되었다는 의심이 들었습니다. (MS가 자신의 헤더에 부적절한 작업을하는 이전의 역사와 함께)

답변

0

추가 조사 후 :

P 작업이 너무 오래 걸리/

(나는 거의 한 시간에 걸쳐 몇 개의 파일 넘어지고 목격하지, 그래서 나는 그 빌드 취소) 내가 할 수 없었어

을 현재 경고 수준이 무엇인지 또는 컴파일의 특정 시점에 적용된 우선 순위를 인쇄 할 수있는 명확한 방법을 찾습니다.그래서 제가 물어 본 질문은/P 논의가 실제로 당신에게 유용하지 않다면 (제가 언급했듯이, 제 목적을 위해서는 비실용적이었습니다) 정말로 대답하지 않았습니다. 내가 할 수 있었다 무엇

는 경고 수준은 그 경고가 활성화 된 또는하지 않을 경우, 활성 경고하는 확인하는 것을 포함하는 경우 경고 필요한를 생성해야하는 다양한 헤더의 일부 인라인 호출을 구성했다 :

인라인 int 테스트 (char 값) {return ++ value; }

는 "뭔가"

인라인 INT TEST1 (INT 값) {반환 테스트 (값)를 포함한다; } // C4244을 생성한다 - 데이터 손실을 이전 #INCLUDE 엉망 내가 무엇을 발견 경고 수준이나 재정의 경고 4244.

등등 ... 결국

를하지 않았다 경우 특히 4244에는 이와 관련된 이상한 규칙이 있고,/W4 (경고 수준 4)를 제외한 모든 경우에 효과적으로 "사용 안 함"- 가장 높은 경고 수준입니다. 그 경고 수준은 매우 까다 롭고 그것에 대해 아무 것도 할 수없는 많은 것들에 대해 불평하기 때문에 나는/W4를 사용하고 싶지 않았습니다. 내가 대신 무슨 짓을

는 우리의 STDAFX.H의 PCH에 다음을 넣어이었다

프라그 경고 (오류 : 4244) //이 완전히 인해 관계없이 모든 상황에서 암시 적 형식 변환 가능한 데이터 손실에 대한 경고를 할 수 있습니다 활성 경고 수준의

그게 효과가있어.

그래서 MS는 우리에게 영향을주는 파일에 불균형 경고 오버라이드를 남기지 않았습니다. 4244가 가장 경고 수준을 제외하고는 매우 관대 한 것입니다. 어쨌든 우리에게 정말 유용하게 사용됩니다.

도움 주셔서 감사합니다.

0

"C4244"의 모든 헤더 파일을 검색하거나 미리 컴파일 된 헤더 파일에만 액세스 할 수 있습니까?

0

/P compiler command line option을 사용하여 시작할 수 있습니다. 전처리 기의 출력을 파일에 출력합니다. 이 방법을 사용하면 경고를 추가하는 실제 머리글을 해제하고 머리글에 대한 힌트를 모으려고 할 수 있습니다.

1

또 다른 옵션은이 명명 될 수도있는 무시 폐기, 오른쪽 #include의 이것은 만들면 기본적으로 경고를 다시 설정 한 후 파일의 맨 위에 this

#pragma warning (defualt) 

를 추가하는 것입니다.

다른 메모에서 Microsoft 헤더가 경고를 해제하지 않을 가능성이 매우 높습니다.

+0

해당 구문은 VS 2008에서 거부됩니다. 특정 경고를 기본값으로 재설정하려고합니다. #pragma warning (기본값 : 4244)을 사용해야합니다. 4244 : C : \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ comdef와 관련된 유일한 헤더는 어디서나 찾을 수 있습니다. (74) : #pragma warning (disable : 4244) : C : \ Program Files (x86) C : \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include \ atldbcli.h (38) : #pragma warning (해제 : 4244) – Mordachai

관련 문제