Pre-defined C,C++ Compiler Macros 정리 사이트
Java에서는 복잡성 때문에 제거된 기능이지만, C/C++에서는 compile 전에 전처리기(Pre-Processor)가 #include, #define 등 각종 Macro 를 전처리하며 이를 이용하면 조건부로 컴파일이 가능하다.
gcc 의 전처리기 명령어는 cpp(The C Preprocessor) 이다
사용할 수 있는 macro에는 _FILE, __LINE_ 같이 compiler마다 있는 macro도 있지만 OS, Compiler 종류별로 다양한 macro 들이 존재하며 이를 잘 활용하면 이식성 있는 프로그램을 제작할수 있다.
실제로 GNU의 소스를 보면 다음과 같이 전처리 기능을 이용하여 플랫폼이 변경되도 재컴파일만으로 동작할 수 있도록 이식성 있게 작성한 것을 볼 수 있다.
문제는 이런 각종 OS, Compiler 의존적인 macro는 외우기도 힘들고 어떤 macro가 어떤 기능을 하는지 찾아보기도 힘들었는데 다른 사람들도 같은 문제를 겪었는지 Macro를 잘 정리해 놓은 사이트가 있다.
아주 오랜만에 C++ 코드를 좀 수정할 일이 있어서 오랜만에 들어가 봤더니 아예 mediawiki 기반으로 웹페이지가 변경이 되었다.
혹시 기존 C/C+소스를 플랫폼/컴파일러에 이식할 일이 생기면 참고하기 좋은 사이트 같다.
주요 Macro 정리
Type | Macro | Description | ||
Identification | _WIN32 | Defined for both 32-bit and 64-bit environments | ||
Identification | _WIN64 | Defined for 64-bit environments. | ||
Identification | __WIN32__ | Defined by Borland C++ |
Type | Macro | Description |
Identification | __linux__ | |
Identification | linux | Obsolete |
Identification | __linux | Obsolete |
Type | Macro | Description | |
Identification | macintosh | Mac OS 9 | |
Identification | Macintosh | Mac OS 9 | |
Identification | __APPLE__ & __MACH__ | Mac OS X Defined by GNU C and Intel C++ |
Type | Macro | Description |
Identification | __GNUC__ | |
Version | __GNUC__ | Version |
Version | __GNUC_MINOR__ | Revision |
Visual C++
Type | Macro | Format | Description |
Identification | _MSC_VER | ||
Version | _MSC_VER | VVRR | VV = Version RR = Revision |
Version | _MSC_FULL_VER | VVRRPPPP | VV = Version RR = Revision PPPP = Patch From ? |