C,C++

[C++]warning C4482 : 비표준 확장 에 대해서

Dongjun_ 2019. 1. 31. 13:51

프로젝트를 빌드 하던 도중 warning C4482 을 발견 했다.

 

경고 1

warning C4482: 비표준 확장이 사용되었습니다. 정규화된 이름에 'MyCodeException::ExceptionID' 열거형을 사용했습니다. 

[경로]\[파일].cpp [줄]

 

위와 같은 에러가 발생하는 이유는 'enum class'로 정의된 열거형을 사용할 때 발생한다.

class MyCodeException {
public:
    enum class ExceptionID {
        num1 = 1,
    };
}

AfxMessageBox(MyCodeException::ExceptionID::num1);

 

- 정식 설명 -

이 경고 메세지는 형식 내부(클래스, 구조체, 네임스페이스 등)에 선언된 이름 있는 'enum class'를 사용할 때 나타난다.

MSVC는 C++11 표준의 'enum class'를 비표준 확장으로 간주할 수 있다.

 

빌드 시 경고 메세지를 없애기 위해서는

C++11 에서 추가된 'enum class' 대신 기존의 'enum' 형식을 사용하면 된다.

enum MyCodeException {
    num1
};

AfxMessageBox(MyCodeException::num1);

 

혹은 기존의 소스코드를 변경하기 싫거나 충돌이 일어난다면

단순히 컴파일러를 다그치면 된다.

#pragma warning(disable : 4482)

 

위 컴파일러 옵션을 사용하면 해당 warning 을 고려하지 않는다.

반응형

'C,C++' 카테고리의 다른 글

[C/C++] WORD, DWORD, QWORD  (1) 2019.03.04
[C/C++] h, cpp 의 관계, include 의 원리  (0) 2019.02.14
[C++]type casting에 관하여  (0) 2019.01.31
Segment 란  (0) 2019.01.23
메모리 영역(Heap, Stack, Data, Code)  (0) 2019.01.23