Contents
1. 미리 정의된 매크로 [Bottom] [Top]
1.1. ANSI-Compliant Predefined Macros [Bottom] [Top]
매크로
테이터형
설명
비고
_ _DATE_ _
문자열
소스 파일이 컴파일된 날짜 (형식: Mmm dd yyyy)
_ _TIME_ _
문자열
소스 파일이 컴파일된 시간 (형식: hh:mm:ss)
_ _TIMESTAMP_ _
문자열
소스 파일이 컴파일된 날짜/시간 (형식: Ddd Mmm Date hh:mm:ss yyyy)
_ _FILE_ _
문자열
현재 소스 파일 이름
/FC 컴파일러 옵션 사용 시 전체 경로 표시
_ _LINE_ _
숫자형
현재 소스 파일의 줄 번호
_ _STDC_ _
부울형
ANSI C 표준을 준수하는지 여부 표시
/Za 컴파일러 옵션 사용
1.2. Microsoft-Specific Predefined Macros [Bottom] [Top]
매크로
테이터형
설명
비고
_ATL_VER
숫자형
ATL 버전 정보
_ _CLR_VER
숫자형
CLR(공용 언어 런타임) 버전 정보
/clr 컴파일러 옵션 사용 시
_ _cplusplus
부울형
C++ 프로그래밍 여부 표시
_CPPRTTI
부울형
런타임 형식 정보 사용 여부 표시
/GR 컴파일러 옵션 사용 시
_DEBUG
부울형
디버깅 모드 여부 표시
/LDd, /MDd, /MTd 컴파일러 옵션 사용 시
_DLL
부울형
DLL 프로그래밍 여부 표시
/MD, /MDd 컴파일러 옵션 사용 시
_MANAGED
부울형
.NET 프로그래밍 여부 표시
/clr 컴파일러 옵션 사용 시
_MFC_VER
숫자형
MFC 버전 정보
_MSC_VER
숫자형
C++ 컴파일러 버전 정보
아래의 표 참고 (_MSC_VER 버전 정보)
_ _MSVC_RUNTIME_CHECKS
부울형
런타임 오류 검사 기능 사용 여부 표시
/RTC 컴파일러 옵션 사용 시
_MT
부울형
멀티스레드 프로그래밍 여부 표시
/MD, /MDd, /MT, /MTd 컴파일러 옵션 사용 시
_WIN32
부울형
Win32 프로그래밍 여부 표시
항상 정의 되어 있음
_WIN64
부울형
Win64 프로그래밍 여부 표시
- _MSC_VER 버전 정보
_MSC_VER 값
버전
1500
Visual C++ .NET 2008
1400
Visual C++ .NET 2005
1310
Visual C++ .NET 2003
1300
Visual C++ .NET
1200
Visual C++ 6
1100
Visual C++ 5
1000
Visual C++ 4.x
- _MSC_VER 매크로 사용 예
#if (_MSC_VER >= 1500) // Microsoft Visual C++ .NET 2008 ... #elif (_MSC_VER >= 1400) // Microsoft Visual C++ .NET 2005 ... #elif (_MSC_VER >= 1310) // Microsoft Visual C++ .NET 2003 ... #else #error This version of Microsoft Visual C++ is not supported. #endif
- 문자 집합 선택 매크로
매크로
설명
_UNICODE
유니코드 지원 (Unicode, wide-character)
_MBCS
멀티바이트 문자 집합 지원 (MBCS, Multibyte-character)
None (_UNICODE 또는 _MBCS 을 선언하지 않은 경우)
아스키 코드 (SBCS, ASCII)
1.3. WIN32 System Predefined Macros [Bottom] [Top]
- _WIN32_xxxxx (시스템 관련) 매크로
Minimum system required
Minimum value for _WIN32_WINNT and WINVER
Windows Server 2008
_WIN32_WINNT>=0x0600
Windows Vista
_WIN32_WINNT>=0x0600
Windows Server 2003 with SP1, Windows XP with SP2
_WIN32_WINNT>=0x0502
Windows Server 2003, Windows XP
_WIN32_WINNT>=0x0501
Windows 2000
_WIN32_WINNT>=0x0500
Windows NT 4.0
_WIN32_WINNT>=0x0400
Windows Me
_WIN32_WINDOWS=0x0490
Windows 98
_WIN32_WINDOWS>=0x0410
Minimum version required
Minimum value of _WIN32_IE
Internet Explorer 7.0
_WIN32_IE>=0x0700
Internet Explorer 6.0 SP2
_WIN32_IE>=0x0603
Internet Explorer 6.0 SP1
_WIN32_IE>=0x0601
Internet Explorer 6.0
_WIN32_IE>=0x0600
Internet Explorer 5.01, 5.5
_WIN32_IE>=0x0501
Internet Explorer 5.0, 5.0a, 5.0b
_WIN32_IE>=0x0500
Internet Explorer 4.01
_WIN32_IE>=0x0401
Internet Explorer 4.0
_WIN32_IE>=0x0400
Internet Explorer 3.0, 3.01, 3.02
_WIN32_IE>=0x0300
2. 유용한 컴파일 지시어 사용하기 [Bottom] [Top]
2.1. #pragma 지시어 [Bottom] [Top]
#pragma 지시어는 여러가지 용도로 사용 가능하다. ANSI 표준을 따르는지, 다른 컴파일러에서도 지원하는지는 모르겠다. 다만, Visual Studio 6.0 이상에는 아무 지장 없이 사용 가능하다.
- #pragma warning
사용법: #pragma warning( warning-specifier : warning-number-list [,warning-specifier : warning-number-list...] )
프로그래밍을 하다보면 불필요한 경고가 많이 발생해서 불편할 때가 많다. 특히 형변환과 같은 부분은 무시할 수도 있지만 컴파일러가 예민하게 반응하면서 수많은 경고를 만들어낸다. 그렇다고 컴파일 설정을 바꿔서 경고 메세지 전부를 생략하기에는 너무 위험하다. 그래서 특정한 경고만 해제하고 싶을 때 사용하면 된다.
- 다음과 같은 경고 메세지를 만난다면 아래와 같이 사용하면 된다.
경고메세지: warning C4244: 'argument' : conversion from 'int' to 'float', possible loss of data
지시어 사용 예: #pragma warning( disable:4244 )
이외에도 여러가지 사용법이 있으므로 MSDN (http://msdn.microsoft.com) 을 참고한다.
- #pragma once
사용법: #pragma once
사용법은 단순하지만 유용한 기능이다. 보통 헤더 파일의 중복 컴파일을 피하기 위해서 #ifndef ~ #endif 문을 많이 사용하고 있다. 바로 이 기능을 수행하는 컴파일 지시어가 #pragma once 이다.
- 간단히 헤더 파일의 앞 부분에 한번만 써주면 컴파일은 2번 이상하지 않는다.
- #pragma comment
사용법: #pragma comment( lib, "winmm" )
- 여러가지 라이브러리 파일을 링크해야 할 경우 유용한 기능으로 프로젝트 설정에서 링크 관련 부분을 찾아서 설정해 주어야하는 불편함을 간단한 지시어로 처리 가능하다.
라이브러리 파일을 설정할 때는 확장자 ( .lib ) 를 제외한 파일이름을 사용할 수도 있다.
