Sablog Models/플랫폼·툴킷 6

C/C++에서 IEEE 754 NaN/Inf 및 연산 오류 탐지 방법

C 표준, C++ 표준은 부동 소수점 표기법 (float, double 또는 long double)을 다루는 방식을 제공한다. 1. 매크로 C언어 표준 라이브러리 헤더 에는 아래 매크로들이 존재한다 (C++ 에도 동일) .INFINITYNAN이들 각각은 float 타입의 constant expression으로 expand된다. 이를 이용해 임의의 실수 인자로 NaN이나 Inf를 넘길 수 있다. 2. number classification macros ()에는 아래 매크로들이 존재한다.FP_INFINITEFP_NANFP_NORMALFP_SUBNORMALFP_ZERO이들은 int 타입의 constant expression으로 expand된다. 의 표준 매크로 함수 int fpclassify(real-floa..

gcc 4.7.0 build for windows msys 1.0

MinGW GCC 4.6.2로 MSYS 1.0에서 configure && make 돌린 결과물입니다.tar archive: http://share.un-i.wo.tc/pub/P/gcc47/gcc-4.7.0-build-msys.tartar.gz gzipped archive: http://share.un-i.wo.tc/pub/P/gcc47/gcc-4.7.0-build-msys.tar.gzsource: ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.7.0/gcc-4.7.0.tar.gzdependency: gmp 5.0.1, mpfr 2.4.1, mpc 0.8.1 and others (http://gcc.gnu.org/install/prerequisites.html)install: "make ..

Visual Studio 10(2010)에서 "계속하려면 아무 키나 누르십시오..."가 안 보여요!

Visual Studio 2010에서 빈 프로젝트나 Win32 콘솔 응용 프로그램을 생성하면 이전의 Visual Studio에서와 달리 실행 파일이 마지막 표준 출력 결과를 볼 수 있도록 기다려 주지 않고 꺼진다.(단축키 Ctrl+F5) 이는 실행 파일의 출력이 지정되지 않았기 때문인데, 원래 콘솔 프로그램은 표준 출력을 콘솔로 내보내는 게 맞지만, 오늘날 콘솔 프로그램은 GUI의 프론트엔드로 쓰이는 일이 잦아지기 때문인지 Visual Studio 2010부터는 출력을 콘솔로 기본 지정하지 않고 있다. 이를 해결하려 한다면 당연히 출력을 콘솔로 지정하면 된다. 다음 둘 중 한 방법으로 프로젝트의 출력을 콘솔로 지정할 수 있다. Visual Studio 2010에서 프로젝트를 열고 메뉴 프로젝트> 속성> ..

MS 컴파일러의 문자/문자열 자료형

Windows에서는 문자/문자열 처리를 위해 특별한 자료형과 예약된 정의를 사용할 수 있다. C언어에서 char 형에는 1바이트 ASCII (+ 2바이트 코드 페이지) 문자가 저장되는 반면 wchar에는 유니코드 문자가 2바이트 기준으로 저장된다. BMP 밖은 대강대강 처리한다. 이것에 신경쓰지 않을 수 있는 타입이 t_char (TCHAR)이다. 매크로 확장은 컴파일러와 옵션에 따라 결정된다. 변수 상수 (L"...") 1B/확장 문자열 유니코드(2B) 문자열 1B/확장 문자열 유니코드(2B) 문자열 플랫폼 대응 문자열 플랫폼 대응 문자열 char * wchar * const char * const wchar * t_char * const t_char * PSTR / LPSTR PWSTR / LPWST..

JIT (Just-in-time) debug, Post mortem debug.

온갖 IDE와 SDK를 설치해 놓고, 지웠던 VS6를 그 위에 설치하는 도중 이런 메시지를 보게 되었다. 처음에는 무슨 소리인지 알아듣지 못할 뻔했지만 알아들었다. MSDN: JIT 연결 설정 (VS2005, VS2008) JIT 디버깅이란 VS나 Java에서 주로 쓰이는 용어로, 이미 만들어진 바이너리 오브젝트에 디버거를 붙이는 것이다. Post mortem (사후) 디버깅과 비슷한 뜻이라고 흔히 알려져 있다. 다만 정확히 하자면 JIT 디버깅은 사후 디버깅의 일종이다. CRT에서 JIT 디버거를 붙일 적절한 방법이 없다면 사후 디버깅은 오브젝트 덤프를 통해 하는 게 일반적이다. Qt Creator 설치 과정에서도 JIT 디버거 설정을 할 수 있다. 결국 이미 런타임/실행파일 디버거가 있는데, VC6를..

_MSC_VER

호환성 프로그램 어쩌구 해서 알 만한 분은 다 아는 MS Visual C++의 컴파일러 자체 매크로 상수이다. VC++4.0: _MSC_VER = 1000 VC++5.0: _MSC_VER = 1100 VC++6.0: _MSC_VER = 1200 VC++7.0: _MSC_VER = 1300 VC++8.0: _MSC_VER = 1400 VC++9.0: _MSC_VER = 1500 VC++에는 각 버전에 따라 이 값이 다르게 정의되어 있다. 이를 이용해 gcc나 g++와 호환인 코드를 짜거나 표준에 어긋나지 않는 코드를 만들 수 있다. #include int main() { #if defined(_MSC_VER) && (_MSC_VER < 1500) __int64 i64 = 0x57bf406691032708;..