Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Visual C++ - "Treat Warnings As Errors" 옵션이 꺼져 있는데도 일부 경고가 에러 처리되는 경우

특정 API를 사용했는데,

hr = CorBindToRuntimeEx(
    pszVersion,                     // Runtime version 
    pszFlavor,                      // Flavor of the runtime to request 
    0,                              // Runtime startup flags 
    CLSID_CorRuntimeHost,           // CLSID of ICorRuntimeHost 
    IID_PPV_ARGS(&pCorRuntimeHost)  // Return ICorRuntimeHost 
);

이런 컴파일 경고가 발생할 수 있습니다.

1>E:\DotNetSamples\Cpp\netfx_host\netfx_host\netfx_host.cpp(38,9): warning C4996: 'CorBindToRuntimeEx': This API has been deprecated. Refer to https://go.microsoft.com/fwlink/?LinkId=143720 for more details.

경고를 원치 않는다면, mscoree.h에서 요구하는 데로 USE_DEPRECATED_CLR_API_WITHOUT_WARNING 전처리 지시자를 정의하면 됩니다.

#ifndef USE_DEPRECATED_CLR_API_WITHOUT_WARNING
#define DEPRECATED_CLR_API_MESG "This API has been deprecated. Refer to https://go.microsoft.com/fwlink/?LinkId=143720 for more details."
#define DECLARE_DEPRECATED __declspec(deprecated(DEPRECATED_CLR_API_MESG))
#define DEPRECATED_CLR_STDAPI EXTERN_C DECLARE_DEPRECATED HRESULT STDAPICALLTYPE
#else // USE_DEPRECATED_CLR_API_WITHOUT_WARNING
#define DECLARE_DEPRECATED 
#define DEPRECATED_CLR_STDAPI STDAPI
#endif // !USE_DEPRECATED_CLR_API_WITHOUT_WARNING

그런데, 특정 빌드에서 "경고"가 아닌 "예러"로 다뤄질 때가 있습니다. 분명히 "Treat Warnings As Errors" 설정이 안 되어 있는데도, 이렇게 컴파일 오류가 발생합니다.

1>E:\DotNetSamples\Cpp\netfx_host\netfx_host\netfx_host.cpp(38,9): error C4996: 'CorBindToRuntimeEx': This API has been deprecated. Refer to https://go.microsoft.com/fwlink/?LinkId=143720 for more details.

이거저거 옵션을 조정해 보니 "Configuration Properties / C/C++ / General" 범주의 "SDL checks" 옵션이 켜져(/sdl) 있는 경우 그렇게 처리가 되었는데요, 그리고 그렇게 원인을 찾고 나서 문서를 보니 이에 대한 내용이 나옵니다. ^^

/sdl (Enable Additional Security Checks)
; https://docs.microsoft.com/en-us/cpp/build/reference/sdl-enable-additional-security-checks

그러니까, /sdl 옵션의 영향 중에는 컴파일 시점에 4146, 4308, 4532, 4533, 4700, 4703, 4789, 4995, 4996 경고에 대한 오류 처리를 포함합니다.




종종 이런 유의 문제가 있습니다. 어떤 문제의 원인은 그 원인의 문서에 자세하게 나와 있는데, 정작 그 원인을 모르면 문서도 있는지 모르는... 그런. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 11/24/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12269정성태7/16/202017695오류 유형: 632. .NET Core 웹 응용 프로그램 - The process was terminated due to an unhandled exception.
12268정성태7/15/202020556오류 유형: 631. .NET Core 웹 응용 프로그램 오류 - HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process
12267정성태7/15/202022543.NET Framework: 927. C# - 윈도우 프로그램에서 Credential Manager를 이용한 보안 정보 저장파일 다운로드1
12266정성태7/14/202019310오류 유형: 630. 사용자 계정을 지정해 CreateService API로 서비스를 등록한 경우 "Error 1069: The service did not start due to a logon failure." 오류발생
12265정성태7/10/202018163오류 유형: 629. Visual Studio - 웹 애플리케이션 실행 시 "Unable to connect to web server 'IIS Express'." 오류 발생
12264정성태7/9/202029746오류 유형: 628. docker: Error response from daemon: Conflict. The container name "..." is already in use by container "...".
12261정성태7/9/202020594VS.NET IDE: 148. 윈도우 10에서 .NET Core 응용 프로그램을 리눅스 환경에서 실행하는 2가지 방법 - docker, WSL 2 [5]
12260정성태7/8/202018510.NET Framework: 926. C# - ETW를 이용한 ThreadPool 스레드 감시파일 다운로드1
12259정성태7/8/202017312오류 유형: 627. nvlddmkm.sys의 BAD_POOL_HEADER BSOD 문제 [1]
12258정성태7/8/202021185기타: 77. DataDog APM 간략 소개
12257정성태7/7/202017431.NET Framework: 925. C# - ETW를 이용한 Monitor Enter/Exit 감시파일 다운로드1
12256정성태7/7/202019196.NET Framework: 924. C# - Reflection으로 변경할 수 없는 readonly 정적 필드 [4]
12255정성태7/6/202019872.NET Framework: 923. C# - ETW(Event Tracing for Windows)를 이용한 Finalizer 실행 감시파일 다운로드1
12254정성태7/2/202017864오류 유형: 626. git - REMOTE HOST IDENTIFICATION HAS CHANGED!
12253정성태7/2/202020839.NET Framework: 922. C# - .NET ThreadPool의 Local/Global Queue파일 다운로드1
12252정성태7/2/202022216.NET Framework: 921. C# - I/O 스레드를 사용한 비동기 소켓 서버/클라이언트파일 다운로드2
12251정성태7/1/202021636.NET Framework: 920. C# - 파일의 비동기 처리 유무에 따른 스레드 상황 [1]파일 다운로드2
12250정성태6/30/202023069.NET Framework: 919. C# - 닷넷에서의 진정한 비동기 호출을 가능케 하는 I/O 스레드 사용법 [1]파일 다운로드1
12249정성태6/29/202019056오류 유형: 625. Microsoft SQL Server 2019 RC1 Setup - 설치 제거 시 Warning 26003 오류 발생
12248정성태6/29/202016801오류 유형: 624. SQL 서버 오류 - service-specific error code 17051
12247정성태6/29/202018742.NET Framework: 918. C# - 불린 형 상수를 반환값으로 포함하는 3항 연산자 사용 시 단축 표현 권장(IDE0075) [2]파일 다운로드1
12246정성태6/29/202019983.NET Framework: 917. C# - USB 관련 ETW(Event Tracing for Windows)를 이용한 키보드 입력을 감지하는 방법
12245정성태6/24/202020458.NET Framework: 916. C# - Task.Yield 사용법 (2) [2]파일 다운로드1
12244정성태6/24/202020373.NET Framework: 915. ETW(Event Tracing for Windows)를 이용한 닷넷 프로그램의 내부 이벤트 활용 [1]파일 다운로드1
12243정성태6/23/202016795VS.NET IDE: 147. Visual C++ 프로젝트 - .NET Core EXE를 "Debugger Type"으로 지원하는 기능 추가
12242정성태6/23/202018433오류 유형: 623. AADSTS90072 - User account '...' from identity provider 'live.com' does not exist in tenant 'Microsoft Services'
... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...