[C/C++] cross platform coding

spring·2020년 11월 9일
0

1. OS check

#if defined(_WIN32) || defined(_WIN64)
char* os = "windows";
#elif defined(__linux__)
char* os = "linux";
#elif defined(__APPLE__)
char* os = "osx";
#endif

2. Compiler Check

#if defined(_MSC_VER)
char* compiler = "msvc";
#elif defined(__GNUC__)
char* compiler = "gcc";
#elif defined(__clang__)
char* compiler = "clang";
#endif

3. C/C++ Check

#if defined(__cplusplus)
char* lang = "c++";
#else
char* lang = "c";
#endif

4. C++11 이상버전인지 확인

#if __cplusplus > 199711L || _MSC_VER > 160
const char* version = "support c++ 11";
#else
const char* version = "not support c++ 11";
#endif

C++의 갈라파고스 MSVC는 C++11을 완벽하게 지원하지 않아 __cplusplus 의 값이 199711 이다.
하지만 대부분의 자주 쓰는 C++11 기능은 사실 포함되어 있으므로 MSCV에서는 _MSC_VER 값을 보는것이 더 좋을듯 하다.


5. 프로세스 비트 확인(OS비트 아님)

#if defined(__x86_64__) || defined(__ppc64__) || defined(_WIN64)
const char* bit = "64";
#else
const char* bit = "32";
#endif

6. 컴파일러 위치

Visual Studio 2017

cl compiler : C:\Program Files (x86)\Microsoft Visual Studio\2017\$(VERSION)\VC\Auxiliary\Build\vcvarsall.bat
include path : C:\Program Files (x86)\Microsoft Visual Studio\2017\$(VERSION)\VC\Tools\MSVC\??.??.?????\include\
lib(x86) path : C:\Program Files (x86)\Microsoft Visual Studio\2017\$(VERSION)\VC\Tools\MSVC\??.??.?????\lib\x86
lib(x64) path : C:\Program Files (x86)\Microsoft Visual Studio\2017\$(VERSION)\VC\Tools\MSVC\??.??.?????\lib\x64

$(VERSION) 에는 Community,Enterprise,Professional 가 들어갈 수 있음.
??는 설치 버전번호 같은데, 매번 번호가 다르다.

Visual Studio 2015

cl compiler : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat
include path : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/
lib(x86) path : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/lib/
lib(x64) path : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/lib/amd64/

Visual Studio 2013

cl compiler : C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/vcvarsall.bat
include path : C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/include/
lib(x86) path : C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/lib/
lib(x64) path : C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/lib/amd64/

Visual Studio 2012

cl compiler : C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/vcvarsall.bat
include path : C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/
lib(x86) path : C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/lib/
lib(x64) path : C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/lib/amd64/

Visual Studio 2010

cl compiler : C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/vcvarsall.bat
include path : C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/
lib(x86) path : C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/lib/
lib(x64) path : C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/lib/amd64/

Windows GCC / G++

compiler : C:/MinGW/bin/gcc.exe , C:/MinGW/bin/g++.exe
include path : C:/MinGW/include
lib path : C:/MinGW/lib

7. 포인터 <-> 정수

x86 과 x64 에서 OS 비트별로 호환되는 자료형은 포인터와 size_t , ptrdiff_t 이다.

8. MSVC version

MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1  _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0  _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0  _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0  _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0  _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0   _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0   _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0   _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1   _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0   _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0   _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0   _MSC_VER == 1100 (Visual Studio 97 version 5.0)
profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글