전체 글 725

MinGW 의 g++ 와 SymbolicC++ 를 이용한 간단한 인터프리터

SymbolicC++ 는 GiNaC 처럼 심볼 처리 수학식 계산을 지원하지만, 리눅스 계열 뿐만 아니라 윈도우 환경에서도 Visual C++ 나 MinGW 의 g++ 와 함께 사용할 수 있는 수학 심볼 처리 라이브러리이다. * SymbolicC++ 내려받기 * Wikipedia 에서 설명하는 SymbolicC++ * MinGW 의 g++ 를 위한 SymbolicC++ 라이브러리 만들기 모든 작업은 MinGW\msys\1.0 폴더에 있는 msys.bat 파일을 실행하여 msys 창에서 한다. $ ./configure $ make $ make install $ make clean 생성된 라이브러리 파일 libsymbolicc++.a 와 libsymbolicc++.la 는 /usr/local/lib 폴더에 존..

프로그래밍/C++ 2014.01.17

Visual C++ 2010 과 SymbolicC++ 를 이용한 간단한 부정적분 계산

SymbolicC++ 는 GiNaC 처럼 심볼 처리 수학식 계산을 지원하지만, 리눅스 계열 뿐만 아니라 윈도우 환경에서도 Visual C++ 나 MinGW 의 g++ 와 함께 사용할 수 있는 수학 심볼 처리 라이브러리이다. * SymbolicC++ 내려받기 * Wikipedia 에서 설명하는 SymbolicC++ * Visual C++ 를 위한 SymbolicC++ 라이브러리 만들기 Visual Studio 에서 솔루션 파일 SymbolicC++3.sin 을 열고 아래 그림 처럼 메뉴 탭에서 Dynamic 이라고 설정된 곳을 Static 으로 변경하고 빌드한다. 그러면 에러와 경고가 몇 개 쏟아질 것이다. * 에러 해결하기 SymbolicC++ 를 빌드하는 과정에서 C:\Program Files (x86..

프로그래밍/C++ 2014.01.17

Visual C++ 2010 과 pdcurses 를 이용한 helloworld 예제

pdcurses 를 컴파일하여 Visual C++ 용 라이브러리 만들기 프롬프트> nmake -f vcwin32.mak * 테스트용 소스 파일: helloworld.c (http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/helloworld.html 에 있는 ncurses 용 소스에서 인클루드 문의 ncurses.h 를 curses.h 로 변경한 것 뿐임) /* * Filename: helloworld.c * * Compile: cl /c helloworld.c /I . * Link: link -nologo helloworld.obj pdcurses.lib user32.lib gdi32.lib advapi32.lib shell32.lib comdlg32.lib * Or ..

프로그래밍/C 2014.01.15

Python 과 curses 를 이용한 카라슈바 곱셈 연습기

ncurses(또는 curses) 는 Linux/Unix 계열의 환경에서 VT100 등의 터미널과 호환되는 윈도우형 입출력 라이브러이다. 이를 이용하면 윈도우의 임의의 위치에 출력도 하고, 임의의 위치에서 입력을 받을 수도 있다. * 카라슈바 곱셈 참조 다음은 Linux 나 Cygwin 환경에서 파이썬 2.7.x 로 실행되도록 작성된 소스이다. # Filename: ezMult_003.py # # Execute: python ezMult_003.py # # Date: 2014. 1. 10. import curses import curses.textpad import random stdscr = curses.initscr() curses.start_color() # curses.nonl() curses.n..

gcc 와 ncurses 를 이용한 카라슈바 곱셈 연습기

ncurses(또는 curses) 는 Linux/Unix 계열의 환경에서 VT100 등의 터미널과 호환되는 윈도우형 입출력 라이브러이다. 이를 이용하면 윈도우의 임의의 위치에 출력도 하고, 임의의 위치에서 입력을 받을 수도 있다. * 카라슈바 곱셈 참조 다음은 Linux 나 Cygwin 환경이면 gcc 로 컴파일하여 실행되는 C 소스이다. /* * Filename: ezmult_003.c * * Compile: gcc -o ezmult_003 ezmult_003.c -lform -lncurses * * Execute: ./ezmult_003 * * Date: 2014. 1. 6. (Mon) v0.002 * Date: 2014. 1. 8. (Wed) v0.003 */ #include #include #in..

프로그래밍/C 2014.01.08

64bit 리눅스에서 32bit 용 C 소스 컴파일하기

32bit OS 에서는 int 타입과 long 타입이 다 같이 4바이트의 크기를 갖지만. 64bit OS 에서는 int 타입이 4바이트, long 타입이 8바이트의 크기를 갖는다. 그렇다면 64비트 리눅스 환경에서 32비트 용으로 작성된 C 소스를 gcc 로 컴파일하려면 어떻게 해야 할까? // Filename: testIntSize.c int main() { #include int main() { printf("sizeof(int) = %d\n", sizeof(int)); printf("sizeof(long) = %d\n", sizeof(long)); return 0; } # 64비트 용으로 컴파일하고 실행하기 $ gcc -o testIntSize testIntSize.c $ ./testIntSize ..

프로그래밍/C 2014.01.04

오일러(Euler) phi 함수 구현하기

Visual C++ 2010 으로 컴파일할 경우, 헤더파일 inttypes.h 가 Visual C++ 2010 에는 빠져 있으므로 http://msinttypes.googlecode.com/svn/trunk/inttypes.h 를 가져와서 아래의 소스와 동일한 디렉토리에 두고 컴파일한다. char * 타입의 C 스트링으로 부터 long long 타입의 정수로 파싱하려면 C99 에서 정한 함수 strtoll 함수를 쓰면 되는데 이 함수 역시 Visual C++ 2010 에는 빠져 있으므로, _strtoi64 함수로 대체하기 위해 소스의 앞 부분에 매크로 정의 #define strtoll _strtoi64 를 추가하였다. 또 main 함수 안에서 사용된 llabs 함수는 long long 타입의 정수의 절댓..

프로그래밍/C 2013.12.14

long long 타입의 정수를 printf 함수로 출력하기

우선 다음 소스는 컴파일하는데는 아무 문제가 없지만 실행 결과는 전혀 엉뚱하다. printf 함수에 사용된 %lld 포맷에 문제가 있기 때문이다. /* * Filename: testLongLong0.c * * Compile: gcc -o testLongLong0 testLongLong0.c * or * Compile: cl testLongLong0.c */ #include int main() { printf("Maximum long long value is %40lld\n", 9223372036854775807LL); printf("Maximum long long value is %40llu\n", 9223372036854775807ULL); printf("Maximum long long value is..

프로그래밍/C 2013.12.03

C++ 언어에서 동작하는 쓰레기 수집기(Garbage collector)

C/C++ 언어 프로그래밍에서 까다로운 부분 중의 하나는 획득했던(할당받았던) 메모리를 여하히 해제하느냐이다. 프로그램밍의 사소한 오류로 메모리 부족 현상이 쉽게 일어나기 때문이다. 프로그램밍의 사소한 오류로 메모리 부족 현상이 쉽게 일어나기 때문이다. 자바 언어, 파이썬 언어, C# 언어 등은 자동으로 쓰레기 수집(garbage collection)이 이루어지므로 거의 신경쓰지 않아도 되지만, C 언어는 소스 작성하는 프로그래머가 직접해야 한다. 오래 전(10여년 전)에 Hans Boehm 가 만들었던 C/C++ 언어용 쓰레기 수집기(Boehm-Demers-Weiser conservative garbage collector, 줄여사 BoehmGC 러고 부름)를 이용하여 컴파일되고 실행되는 소스이다. 이..

프로그래밍/C++ 2013.10.20

C 언어에서 동작하는 쓰레기 수집기(Garbage collector)

C 언어 프로그래밍에서 까다로운 부분 중의 하나는 획득했던(할당받았던) 메모리를 여하히 해제하느냐이다. 프로그램밍의 사소한 오류로 메모리 부족 현상이 쉽게 일어나기 때문이다. 자바 언어, 파이썬 언어, C# 언어 등은 자동으로 쓰레기 수집(garbage collection)이 이루어지므로 거의 신경쓰지 않아도 되지만, C 언어는 소스 작성하는 프로그래머가 직접해야 한다. 오래 전(10여년 전)에 Hans Boehm 가 만들었던 C/C++ 언어용 쓰레기 수집기(Boehm-Demers-Weiser conservative garbage collector, 줄여사 BoehmGC 러고 부름)를 이용하여 컴파일되고 실행되는 소스이다. 이 쓰레기 수집기를 쓰면, 메모리 해제(free)를 프로그래머가 신경쓰지 않아도 ..

프로그래밍/C 2013.10.19