Sablog Models 55

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..

간단한 Windows API / Windows CE API 개발 환경 (2)

앞서 vcvars32.bat이나 wcearmv4i.bat 등으로 최소한의 빌드 환경을 구축할 수 있었다. 한편 cl.exe나 clarm.exe의 입출력을 제어하는 것만으로는 부족할 때가 있는데, 라이브러리를 사용하게 되면 거의 항상 그렇다. 마이크로소프트의 빌드 시스템과 라이브러리는 20년에 가까운 시간 동안 자신들의 엄격한 호환성을 지키며 엄청나게 복잡하게 발전해 왔고, IDE를 통하지 않으면 프로젝트를 잘 진행하기 어렵게 되었다. 물론 그 IDE는 솔직히 다른 IDE와는 비교가 안 될 정도로 멋지고 강력하지만, 아쉬운 건 어쩔 수 없다. GNU 빌드 시스템과 MS 빌드 시스템을 묶은 것들도 유명하다. CMake나 Qt의 moc인 qmake 등이 그것이다. 비록 지향점은 다르지만 (CMake는 보다 n..

간단한 Windows API / Windows CE API 개발 환경

Windows 상에서 API 개발을 하다 보면 간단한 프로젝트의 경우 Visual Studio를 설치하고 다음과 같이 배치 파일을 사용해 커맨드라인 환경을 사용할 때가 있다. (예: VC 10.0, 루트 드라이브 문자가 C:일 때, 32비트)call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"cl.exe를 사용할 수 있으며 대개 별도의 옵션은 필요 없다. 한편 간단한 프로젝트에서는 마찬가지로 eMbedded Visual C++ 4.0으로 비슷한 일이 가능하다. (예: 타깃 플랫폼 armv4i)call "C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\wce400\bin\wcearmv4i.ba..

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에서 프로젝트를 열고 메뉴 프로젝트> 속성> ..

OS 재설치의 끝, grub 삽질기

난 가난한 놈이라 (?) 하드 디스크 하나에 OS 3개를 설치해 쓰고 있고, 더 쓸 공간을 남겨 놓고 있다. 파티션 번호 1/P 2/P 3/P 4/E 5/L 6/L 7/L 8/L 9/L 10/L 용도 /boot NT loader C:\ D:\ E:\ (fedora)/ swap /home (opensuse)/ 이런 변태짓이 가능하다는 것부터가 예전보다야 덜 가난해졌다는 뜻이지만 (...) C드라이브에는 Windows 7 Ent 64b가 설치되어 있는데, 윈도우가 이렇게 자리를 잡기까지 3번이나 재설치하고 한번은 날려먹은 백업 파티션을 복구하기까지 꽤나 험난했다-_-; 이 과정은 상기하기조차 싫을 정도다. 페도라와 오픈수세는 /boot, swap, /home을 공유한다. /boot는 일부러 P파티션으로 뺐다..

ibus, 아직은 꽤 모자라다

최근에 공용 컴퓨터를 하나 설치하는 일을 맡게 되었다. 우선 바이오스 락을 걸었지만, 학생들이 특정 학습 목적으로만 써야 하는 컴퓨터이다 보니 막아야 할 것이 한두 가지가 아니었다. 게다가 중고를 갖다 놓아서 시스템 사양이 썩 좋지 않다 보니 윈도우 XP도 겨우 돌리는 수준이었고, 그나마 윈도우 XP를 돌린다고 해도 시스템 감시 프로그램을 얹을 만한 형편이 안 되었다. 그런 시스템 감시 프로그램따위 핵이 난무하고 말이다. 그 시스템에는 리눅스 디스트로를 하나 설치해 보기로 했다. 512MB DDR 한 장 붙어 있었으니 당연히 페도라는 설치부터 안 되었고, 우분투는 그럭저럭 돌아갔지만 그래픽 카드가 얼마나 구형인지 (유니티는 당연히 꺼지고) 주사율을 60Hz로 맞추어도 화면이나 창이 깜박였다. 결국 패키지..

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..

Notepad2 패치에 발을 담그다 - (2) Mark Occurrences, anywhere for non-ASCII

Notepad2 패치에 발을 담그다 - (1) Mark Occurrences, Case insensitively http://un-i.tistory.com/entry/Notepad2-Custom-Patch-1-Mark-Occurrences-Case-insensitively 위 링크에 이어지는 글. 위의 패치가 적용되었다고 가정한다. 주의: 이 방법은 ANSI나 UTF-8 인코딩에서만 정상적으로 작동하는 것으로 확인되었다. UCS-16에서도 한글이나 가나 문자에는 잘 적용되지만, 특정 한자에는 적용되지 않을 수 있다. Mark Occurrences 기능은 원래 대소문자가 일치하는 전체 단어에 대해서만 강조하게 되어 있다. 이 중 대소문자 일치 여부를 메뉴에서 선택하게 한 것이 패치 (1)이다. 메뉴를 이용..

Notepad2 패치에 발을 담그다 - (1) Mark Occurrences, Case insensitively

블루앤라이브 님의 Notepad2 4.2.25 패치 중 Notepad2-mod에서 차용된 것이 있으니, Notepad2 4.2.25 패치 준비#4: Mark Occurrences 기능 추가 링크된 블로그 글에도 있다시피, 다음과 같이 선택된 부분과 일치하는 단어를 강조해 주는 기능이다. (Notepad2 4,2,25 original w/ Scintilla 2.25 + 'Mark Occurrences' original) 이 기능을 조금 바꾸어, 아래와 같이 대소문자에 무관하게 동작할 수 있도록 했다. 어셈블리어 소스 코드라든지, 같은 단어가 대소문자를 달리해 나타나는 보통의 글 등에서 쓸 수 있다.물론 메뉴에서 적용 여부를 선택 가능하며, 기본값은 대소문자 구분이다. 참고로, 대부분의 언어에서 식별자는 대..