* 문자열 합치기( # )
#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 는 해당인자를 모두 무시


반응형
Posted by codens