가끔씩 오픈 소스등을 사용하다보면, 소스 내에서 _MSC_VER 이라는 상수를 본 적이 있을겁니다.
이 _MSC_VER의 이름으로 유추해보면 MS C++의 버전 정보라는 것을 알 수가 있습니다.
_MSC_VER는 MS Visual C++의 컴파일러의 자체 매크로 상수입니다.
특별히 개발자가 따로 지정하지 않더라도, 컴파일러 내부에 정의되어 있는 상수입니다.
이 매크로 값을 이용해서 Visual C++의 버전에 따라 자동으로 분기되는 소스 코드를 작성할 수 있습니다.
다음은 오픈소스인 TinyXML의 소스 일부입니다.
01.// Microsoft compiler security
02.FILE* TiXmlFOpen(const char* filename, const char* mode)
03.{
04.#if defined(_MSC_VER) && (_MSC_VER >= 1400)
05.
06.FILE* fp=0;
07.errno_t err=fopen_s(&fp, filename, mode);
08.if(!err && fp)
09.{
10.return fp;
11.}
12.
13.return 0;
14.#else
15.return fopen(filename, mode);
16.#endif
17.}
_MSC_VER이 정의가 되어 있는지, 그리고 그 값이 1400이상인지 아닌지 체크한 다음, 각 컴파일러 버전에 따라
알맞은 루틴으로 분기하게 되어 있습니다.
이 _MSC_VER 값은 Visual C++ 버전에 따라 다음과 같습니다.
Visual C++4.0 : _MSC_VER = 1000
Visual C++5.0 : _MSC_VER = 1100
Visual C++6.0 : _MSC_VER = 1200
Visual C++7.0 : _MSC_VER = 1300
Visual C++8.0 : _MSC_VER = 1400
Visual C++9.0 : _MSC_VER = 1500
그렇게 많이 쓰이거나 중요한 부분은 아니지만,
그래도 대략 이 값이 어떤 의미를 가졌는지 알면 나쁠 건 없으니깐요. ^^
출처: https://snowbora.tistory.com/365 [눈보라 이야기]
docs.microsoft.com/ko-kr/cpp/preprocessor/predefined-macros?view=msvc-160
'Development > C++' 카테고리의 다른 글
NetStream (Examples) (0) | 2022.03.16 |
---|---|
C/C++ 자료형 (0) | 2022.03.16 |
Signed vs Unsigned (0) | 2020.10.31 |
UTF-8 string to wstring (0) | 2020.09.18 |
wstring to UTF-8 string (0) | 2020.09.17 |