* 문자열 합치기( # )
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
사용 : message_for(Carole, Debra);
결과 : Carole and Debra: We love you!
* 인자로 만들기 (##)
- 문자열은 띄워쓰기를 해도 합쳐짐("aaa" "bbb" ==> "aaabbb" )
#define tokenpaster(n) printf ("token" #n " = %d", token##n)
사용 : tokenpaster(34);
결과 : printf ("token34 = %d", token34);
//==================================================
http://msdn.microsoft.com/en-us/library/b0084kay.aspx
__LINE__ 소스라인 번호
__FILE__ 현재 소스 파일 이름
__DATE__ 소스파일 컴파일 시간 , Mmm dd yyyy.
__TIME__ 소스파일 컴파일 시간 , hh:mm:ss.
__TIMESTAMP__ 소스파일 수정 시간 , Ddd Mmm Date hh:mm:ss
_MSC_VER
_WIN64 : 64bit여부
//======================
* 윈도우 버전 판별 매크로
- 별도로 없다, GetVersion() 함수를 통해 만들어야 한다
http://www.codeproject.com/Articles/10563/Windows-version-requirements-macros
//Windows version macros
#define WinVerMajor() LOBYTE(LOWORD(GetVersion()))
#define WinVerMinor() HIBYTE(LOWORD(GetVersion()))
#define IsWinVerNTs() (GetVersion() < 0x80000000)
#define IsWinVerNT351Plus() (IsWinVerNTs() && WinVerMajor() >= 3)
#define IsWinVerNT4Plus() (IsWinVerNTs() && WinVerMajor() > 3)
#define IsWinVer98Plus() (LOWORD(GetVersion()) != 4)
#define IsWinVerMEPlus() (WinVerMajor() >= 5 || WinVerMinor() > 10)
#define IsWinVer2000Plus() (WinVerMajor() >= 5)
#define IsWinVerXPPlus() (WinVerMajor() >= 5 && LOWORD(GetVersion()) != 5)
//======================
//참고
http://www.tutorialspoint.com/ansi_c/c_preprocessors.htm
http://www.hachangho.com/homev30/bbs/zboard.php?id=tech&page=3&sn1=&divpage=1&category=13&sn=on&ss=off&sc=off&select_arrange=subject&desc=desc&no=409&PHPSESSID=1e1b204d4f75879a5104702c1a660548
//
* #@ 문자로 변환
#define makechar(val) #@val
makechar(a) ==> 'a'
* __noop 는 해당인자를 모두 무시
'Code > Desktop' 카테고리의 다른 글
윈도우즈 64/32비트 판별 함수 (0) | 2014.03.26 |
---|---|
Native API의 함수포인터를 지정할때 에러 해결방법 (0) | 2014.03.23 |
UINT64 -> double 형변환 (0) | 2014.03.22 |
이벤트 커널 개체 사용법 (0) | 2014.03.19 |
샘플 추적용 영상 다운로드 사이트 (0) | 2014.03.11 |