여치의 프로그래밍 강좌 #2

조회 수 31837 추천 수 275 2005.07.27 23:16:23
/*
과거 모 잡지에 연재했던 프로그래밍 강좌입니다.
퍼가실땐 사전에 동의를 얻으시기 바랍니다.
-유영천
*/

언어란....
언어란 무엇인가? 이 방면으로 전공한 언어학자들의 말을 들으면 훨씬 더 많은 얘기가 나오겠지만 여기 우리가 학습하고자 하는 프로그래밍 언어에 대해서는 그저 한마디로 끝낼 수 있겠다.

‘언어(프로그래밍언어)란 규칙이다’

그렇다 규칙이다. 룰이다.
여러분이나 필자가 프로그래밍 언어를 하나 만들어서 통용시킬 수 도 있다. 많은 이들이 채택해서 사용한다면 하나의 프로그래밍 언어로 인정받을 수 있다 뭐 현실적으로는 엄청난 노력을 기울인다 해도 거의 불가능하겠지만...

Low-Level 언어-기계어와 어셈블리

어드레스          명령어(16진수)

004013D2         90                  
004013D3         90                  
004013D4         EB 01              
004013D6         CC                  
004013D7         90        

이게 뭔 소린지 알겠는가? 척 보고 알았다면 그대는 이 강좌를 볼 필요가 전혀 없다!
사용자 입장에서 봤을때 일생에 도움이 안되는 아무짓도 안하는 간단한 프로그램이지만 이렇게 써놓으면 엄청난 암호같지 않나?
이것은 디버거(디버깅을 하는 툴)로 본 기계어 코드의 일부이다.

다음을 보자.
213:          nop
214:          nop
215:          jmp     label_1
216:          int     3
217:  label_1:
218:          nop
이것은 위의 기계어 코드와 동일한 일을 하는 어셈블리 코드이다. 대부분의 독자들은 이걸 봐도 그다지 쉽다는 생각은 안들겠지만 어쨌거나 숫자만 가지고는 암호 해독하는 기분보다는 문자가지고 때려맞추는 기분이 좀 더 나을것이다.
자세히 보면 위의 기계어 코드와 아래의 어셈블리 코드는 한줄씩 1:1대응된다는 것을 알 수 있다.

nop == 0x90
nop 은 CPU로 하여금 아무짓도 하지 않게 하는 명령이다. 그냥 클럭만 소비하고 아무짓도 하지 않는다.

jmp == 0xEB 0x01
특정 어드레스로 점프하게 한다. 어셈블리에서 JMP는 한개지만 실제로 기계어코드로 바뀔때는 옆의 오퍼랜드(위에서는 0x01)에 따라 각각 다른 명령으로 대치된다. 이 명령은 1바이트 건너뛰라는 뜻이 되겠다.

int 3== 0xCC
디버그 인터럽트를 걸어준다. 인터럽트에 대해서는 나중에 따로 설명하겠다.

이와같이 1:1 대응된다.
오케...한가지 확실히 알았다 어셈블리와 기계어는 1:1대응된다. 기계어가 하도 머리 아프니까 쉽게 하려고 어셈블리를 만든거다. 그러니까 그냥 같다고 생각해도 된다.
잠깐 다른 얘기를 하자면...
대항해시대4라는 게임은 윈도우즈 2000에서 설치되지 않는다. 버전체크를 하는데 95,98이 아니면 셋업화면에서 종료해버린다. 몇 년전에 윈도우즈 2000으로 시스템으로 완전히 바꾸고나서 이 게임을 너무나 하고 싶었다. 크랙경험이 전무했던지라 울트라 에디트 와 VC++의 디버거, W32DASM이람 디스어셈블러를 가지고 열심히 크랙을 시도해서 파란색 셋업화면까지 갔다가 다음날 훈련소(병특은 훈련소에 한달 다녀온다.) 가는 바람에 흐지부지 되었던 기억이 난다. 파일을 직접 에디트 하느라고 기계어 코드를 직접 고쳤었는데 한참 하다보니까 몇 가지 명령어는 눈으로 보고 바로 해석할 수 있었다. 그러니까 기계어도 하려고 하면 할 수는 있다. 열라 많이 하다보면 말이다.
그렇다해도! 매트릭스에 나오는 인간들처럼 샤샤샤샥 지나가는 기계어 코드를 실시간으로 읽어서 머릿속으로 시뮬레이션 하는 그런건 불가능하다.--;

다시 본론으로 돌아와서...
기계어와 어셈이 거의 같다고 하는 것은 바꿔 말하면 기계어의 제약 사항은 어셈블리에 모두 적용된다는 뜻이다. 기본적으로 코드를 짜는 순간부터 CPU에 직접 지시할 명령어의 집합을 만들어내는 것이니까. 당연한 얘기지만 Intel x86계열의 CPU용 어셈블리&기계어는 다른 벤더의 CPU의 그것과 호환되지 않는다. 딴지 거는 독자가 있을까봐 미리 말해두지만 AMD나 Cyrix의 CPU는 원래 인텔의 호환칩이다. 모토롤라의 x68계열이 대표적인 비 호환칩이다.

CPU새로 나올 때마다 프로그래밍 언어를 새로 배우자니 미치고 환장할 노릇. 지금도 프로그래머가 3D업종이긴 하지만(해보면 안다) 모든걸 어셈블리로 짜야하고 CPU 바뀔 때마다 새로 공부해야한다면 아마 프로그래머 씨가 말랐을 거다. 아니면 의외로 연봉이 훨씬 높아져서 먹고 살 만해졌을지도....(C/C++의 개발배경은 어려운 프로그래밍 언어를 만들어서 프로그래머들이 잘 먹고 잘 살게 하기 위한 음모였다라는 우스갯소리도 있다.)

그리하여 High-Level언어가 등장하였다.
행여나...하이레벨 언어는 진짜로 하이레벨인 사람들이 쓰고, 로우레벨 언어는 로우레벨인 사람들이 쓴다고 착각하는 독자가 있을지 모르겠다. 노파심에 말해두지만 로우레벨 언어가 훨씬 어렵다. 기계를 로우, 사람을 하이 계층에 있다고 본다. 따라서 기계에 가까운 쪽으로 갈 수록 로우레벨이라고 한다. 사람 머리 속에서 기계처럼 시뮬레이션 하는게 보통 어려운게 아니니까...로우레벨이 어렵다. 사람 편하자고 만든게 하이레벨 언어다.

하이레벨 언어에 대해 썰을 풀자면 철학적인 얘기도 많이 들어간다. 책에 보면 그런 얘기 많다. 더우기 요새 나오는 객체지향 어쩌고 하는 얘기들을 보면 순 철학이다. 그러나 필자는 그런 얘기는 별로 좋아하지 않으므로 우리가 프로그래밍을 하기 위한 최소한의 것만 알아두는 것이 좋다고 생각한다.
다시 어셈으로 돌아가서...어셈블리 코드를 실제로 돌리기 위해서는 기계어로 바꿔주는 작업이 필요하다. 어셈블이라고 하고 이 작업을 하는 툴이 어셈블러 이다.
하이레벨 언어도 마찬가지고 실제로 코드를 돌리기 위해선 CPU종속적인 기계어 코드로 바꿔줘야한다. 컴파일이라 하고 이 작업을 해 주는 툴이 컴파일러이다.
최근 몇 년 사이 관심을 끌게 된 VM방식(JAVA가 대표적)도 고급언어의 개념과 거의 같다. 다만 가상의 머신을 설정해서 그 머신용의 기계어 코드로 컴파일한다는 점이 다르다. 가상의 머신은 진짜로 하드웨어로서 만들어질 수도 있고 소프트웨어로 시뮬레이션 할 수도 있다. PC에서 돌아가는 JAVA프로그램들은 PC에 띄워진 소프트웨어 자바가상머신으로 돌아가는 것이다. 뭐 이건 그냥 여담으로 하는 소리니까 그런가보다 하고 넘어가기 바란다. 관심있으면 책 찾아보고...

complile&assemble.jpg



하이레벨 언어는 무수하게 많다. 익히 알고 있을 BASIC, C/C++ , COBOL, FORTRAN.... 등등.
필자가 좀 싸이코였다면 과감하게 COBOL같은거 강좌로 쓰고 싶어했을지도 모를 일이지만...

다음은 프로그래밍의 도에서 발췌한 내용이다.
1.2
도는 기계어를 낳았다. 기계어는 어셈블러를 낳았다.
어셈블러는 컴파일러를 낳았다. 그리하여 세상은 만가지도 넘는언어로 가득하게 되었다.
모든 언어는 아무리 비천한 것일지라도 그 뜻한 바가 있다. 모든 언어는 소프트웨어의 음과양(陰陽)을 나타낸다. 모든 언어는 도 안에 그 자리가 있는 법이다.
하지만 할 수만 있다면 코볼(COBOL)로는 프로그래밍하지 말지어다.

무슨 얘기를 하고싶은건가 하면...하이레벨 언어라고 다 같은게 아니고 시대의 트랜드에 맞고 더 사용하기 쉽고 유지보수하기 쉽고 빠른고 효율적인 코드를 작성하게 해주는 언어가 당연히 각광받게 마련. 그런 언어들이 살아남는다. 코볼이 후지다고 말하고 싶은건 아니다. 많은 시간이 지나도 살아남는 언어는 그만한 가치를 가지고 있기 때문이라는 점을 말해두고싶은 것이다.
따라서....
우리는 아직까지 살아남아 수많은 전자과,컴공과,전산과 1학년생들을 괴롭히는 C/C++에 대해서 배워보겠다.(서두가 길었다)


C/C++언어
C의 역사에 대해서 말하자면...웹에서 찾아보면 박터지게 많이 나올듯하여 굳이 쓰고싶지 않다.역사가 어쨌건 별로 중요한건 아니니까.
UNIX OS가 C로 쓰여졌다는건 다들 아는 사실일터. 이후로 OS는 거의 대부분 C로 쓰여졌다. 물론 하드웨어를 직접 다뤄야 하는 부분들이나 속도에 매우 민감한 부분은 어셈블리로 쓰여진다. Windows, Unix, Linux등 익히 알려진 OS들도 대부분의 C와 일부 어셈블리로 쓰여졌다. 이 정도 얘기해두면 왜 많은 고급 언어 중에 C를 선택했는지는 설명할 필요가 없을것이다. 배우기 쉽고 간결하고 , 빠르고 작은 코드를 생성해 줄 수 있으며(다른 고급언어들에 비해) 타 기종으로 이식하기 쉽다.
C++은 C언어에 시대의 트랜드인 객체지향을 집어넣은 것이다. C++객체지향 전문가를 자처하는 사람들은 펄쩍 뛰겠지만, C나 C++이나 별반 다르지 않고 C++은 C의 확장 개념으로 생각하면 된다. 그 객체지향이란것도 원리를 알고보면 어셈블리로도 얼추 비슷하게 꾸밀 수 있는것이다.

드디어 첫 걸음을...

작업환경
뭔가 만들려면 플랫폼을 결정해야한다.
쉽게 접할수 있고 해두면 적어도 밥은 굶지 않는..그런 플랫폼이 있다. 이른바 윈텔 플랫폼.
Intel x86 CPU와 Windows OS가 그것이다.
MS가 숱하게 욕을 먹고 있으나 개발자 입장에서 MS만큼 좋은 개발 환경을 제공하는 업체는 없다. 이건 현실이다. 그 때문에 Windows용 소프트웨어가 줄창 쏟아져나올수 있었고 자연히 MS의 OS를 사용하지 않을수 없었다.
그러니 거부감 없이 윈텔 플랫폼에서 작업하시라. 좋은 개발 환경을 찾는 것은 당연하다.
컴파일러로는 MS의 Visual C++6.0을 사용할 것 이다. 참고로 요샌 OS도 VC로 만든다. OS에 들어가는 드라이버도 VC로 만든다. 3DS Max용 플러그인도 VC로 만든다. 마야용 플러그인도 VC로 만든다...필자가 VC에 익숙하다는 점을 논외로 치더라도 VC에 익숙해지는 편이 여러모로 편하다. 왜 7.0을 사용하지 않냐고 따지지는 마라. 필자의 PC가 느린 탓에 아직 6.0을 사용하고 있는데 어쩌라고. 회사 PC는 Pentium3 600Mhz, 집 PC는 Pentium3 866Mhz PC다. 돈이없어서 집pc는 업그레이드 못하고 있고 회사컴은 빠르게 돌아가는 코드를 짜기 위해 일부러 느린걸 쓰고있다.

GUI vs CUI
이전에 통신 동호회에서 활동할때는 게시판에 가장 많이 올라오는 질문답이 이거였다
Q:프로그래밍을 처음 시작하려고 하는데 뭘 해야할지 모르겠어요
A:도스용 터보C로 도스용 프로그램부터 짜보세요..

그러나!!!! 필자는!!
도시락 싸들고 말리고싶다.
시대가 어느 시대인데 터보C를 쓰나...답을 쓴 자의 마음은 알겠으나 이 시대에 도스용 프로그램 짠다는 것은 일생에 도움이 안될뿐더러 가장 큰 문제, 프로그래밍을 중도포기하게 할 가능성이 크다! 문득 도스가 뭔지 모르는 독자들이 있을지 모르겠다는 생각이 드는데...
Disk Operating System의 약자로서 IBM PC가 처음 보급될때 끼워팔았던 OS다. Windows 98까지만해도 도스 부팅이 있었다. 새까만 화면에 프롬프트 하나 뜨는....
요새 많이 쓰는 Windows 2000이나 XP에서 도스부팅은 불가능하다. OS뜨고나면 Command Prompt창을 띄울 수 있는데 이건 도스창이 아니다. 엄연히 NT커널 하에서 돌아가는 그냥 디자인만 도스창과 비슷한 UI(User Interface)일뿐이다.
위에서 저 Q/A얘기를 왜 했는지 감이 오는가? 답을 한자의 의도는 텍스트 모드 프로그래밍부터 먼저 해보세요..그런 뜻이다. 그리고 내 말은 윈도우즈에서도 텍스트 모드 프로그램을 짤 수 있기 때문에(그것도 아주 훌륭하게 실전에 적용할 수 있는) 굳이 불편하게 도스용 컴파일러를 사용할 필요가 없다는 뜻이다. 흔히들 윈도우즈용 프로그램을 짠다고 하면 화면에 창 뜨고 x버튼 뜨고 뭐 그런걸 생각하는데 윈도우즈에서도 꽤 많은 텍스트 모드 프로그램이 실전에서 쓰이고 있다. 그리고 이것들을 CUI(Console User Interface) 프로그램이라 부른다.
익히 알고있겠지만 일반적인 윈도우즈의 창 뜨고 버튼 있고 아이콘 있고 그런 것들이 GUI(Graphic User Interface)이다.
CUI프로그램의 대표적인 예는 각종 온라인 게임의 서버 프로그램들이다. 서버 프로그램에 화려한 윈도우 인터페이스는 필요가 없다. 해보면 곧 알게 되겠지만 화면에 온갖 화려한 버튼과 창들과 아이콘들을 띄워대는 작업은 엄청난 노동이다. 머리 써서 하는 일이 아니고 그냥 노동이다. 단순하면서도 짜증나는 노동이다. 또 윈도우즈 모드에선 화면에 글자 하나 찍는게 콘솔모드에서처럼 쉽지 않다. 그러니 직접 일반 유져들을 상대하는 소프트웨어가 아니라면 GUI보단 CUI로 짜는게 편하다.
학습의 관점에서 바라봐도 CUI가 GUI보단 초심자에게 월등히 유리한 점이 있다.
윈도우즈모드(창모드) 프로그램을 짜려면 윈도우즈의 메시지 메카니즘을 알아야한다. C언어문법도 헷갈리는 사람들에게 이런걸 강요하긴 무리. 콘솔모드(CUI) 프로그램은 코드의 흐름이 비교적 선형적이고 직관적이다. 뭔 소린지 이해가 쉽지 않겠지만 보다보면 곧 알게 된다. 게다가 콘솔모드는 어느 OS에서건 통용될 수 있는 공통적인 인터페이스(텍스트환경)을 사용하기 때문에 다른 OS(유닉스,리눅스 등)에서 프로그래밍을 해도 별 문제가 안된다.
CUI 소프트의 대표적인 예, 명령프롬프트(cmd.exe)와 GUI 소프트 계산기(calc.exe)

cmd&calc.jpg




VC++ 시작하기
자 이제 장황한 얘기는 그만 듣고 뭔가 만들어보자. 일단 돌아가는게 눈에 보여야 의욕이 생기지.
다음은 VC++의 초기화면이다. 처음 깔면 뭐라고 나오는데 다 무시하고 넘어가면 된다.
처음 인스톨할때는 권장옵션은 다 인스톨하기 바란다. 요새 하드 공간 넉넉하니까...행여라도 MSDN설치 안하는 독자는 없기를...필수다 필수. MSDN없이 프로그래밍 하겠다는 것은 총없이 전쟁하겠다는 것과 똑같다. 나는 몸빵하고 가서 주먹으로 팰거야...라고 하는것과 같은....

vc_start.jpg



이제 간단한 프로그램을 짜기 위해 새 프로젝트를 하나 만들겠다.
File->New->Project 탭으로 간다.다른건 신경쓸거 없고 Win32 Console Application을 선택한다.프로젝트 이름과 파일을 생성할 폴더를 써 주고 OK를 누른다.

vc_new_project.jpg



다음과 같은 화면이 나오는데 맨 위의 empty프로젝트를 선택한다.

vc_new_project_empty.jpg




이제 Finish버튼을 누르면 프로젝트 생성이 완료되고 아무것도 없는 초기화면이 다시 나온다. 실제 프로그래밍에 들어가기 위해 .cpp파일을 하나 만들겠다.
메뉴에서 File->New->Files를 선택하고 C++ Source File을 선택한다.
파일명을 적어주고 OK버튼을 누른다.

vc_new_cpp.jpg




허연 화면이 하나 뜬다. 이것이 아무것도 기입되지 않은 CPP코드 파일이다. 이제 코드를 써넣고 컴파일하면 돌아가는 것이다.

vc_new_cpp_blank.jpg



다음의 코드를 입력하고 저장한다.
소스 코드 한개를 저장할때는 Save(CTRL+S)해도 되고 프로젝트 째로 저장할때는 File->Save All(단축으로는 Alt+F -> Alt+L이다.하면 된다.

혹시 감이 안잡힐 독자를 위해 스샷을 첨부한다

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
        int a,b,c;
        a = 0;
        b = 100;
        c = 100;
        a = b + c;
        
        printf("움화화화화...나는 Hello World로 시작하지 않는다!!!\n");
        printf("%d + %d = %d\n",b,c,a);
        
        _getch();
        return 0;

}

vc_first_code.jpg




메뉴에서 Build->Build 파일명 을 클릭하거나 F7을 누르면 컴파일을 하고 링크가 이루어진다. 링크에 대해서도 추후 설명하겠다. 어쨌거나 이렇게 하면 실행할 수 있는 프로그램 파일이 만들어진다.
아래쪽 아웃풋 창을 잘 보자. 에러가 0이고 컴파일이 무사히 끝났다면 다행이지만 그렇지 못했다면 잘못입력한 부분이 있는 것이다. 소스랑 잘 비교해서 다시 한번 살펴보자.
에러가 없이 컴파일 됐다면...

F5를 누르면....
짜잔~~~

vc_first_code_result.jpg




코드 설명 없이도 대충 어떻게 이런 결과가 나왔는지는 유추할 수 있을것이다. 하지만 설명도 없이 넘어가면 강좌 짤릴테니 물론 설명은 하겠다. 허나 이번 챕터에선 툴 사용법에 대한것까지만 다루고 실제적인 C의 문법과 메카니즘은 다음 챕터로 넘기겠다.
어쨌거나 연산과 출력을 해보았으니 당당히 프로그래밍의 세계에 첫발을 내딛은 셈이다.
참고로 거의 모든 프로그래밍 서적에서는 첫 예제로서 Hello World를 찍는 프로그램을 짠다.음...필자는 그게 별로 맘에 들지 않았다. 그리하여 이러한 예제 프로그램을....

VC설정
VC++을 띄웠으니 잠깐 몇 가지 설정을 하고 넘어가자. 기본 폰트는 너무 두껍고 크다.화면에 코드가 많이 안보이고 눈이 쉬 피로해지는 경향이 있으니 맘에 안드는 독자들은 폰트를 바꾸시기 바란다.

메뉴에서 Tools-> Options -> Format이다.

vc_format.jpg




또한 Tools->Options -> Workspace에서 Disassembly항목을 체크해주기 바란다. 다음과 같이 체크하면 된다. 이는 앞으로 디버깅할때마다 c코드와 함께 어셈블리 코드를 보기 위함이다.

vc_customize.jpg




VC++ 상단의 툴바 화면이 필자와 다르다고 이상하게 생각하는 독자가 있을지 모르겠는데 이는 코드를 볼 수 있는 공간을 넓히기 위해 자주 사용하지 않는 툴바는 제거했기 때문이다.이와같이 하려면 Tools->Options->Customize에서 툴바를 찍어서 드래그 앤 드롭하면 된다.

vc_customize.jpg




2회를 마치며
뭔가 썰렁하다 느껴지는 2회였다. 본격적인 코딩에 들어가지 않았기 때문일까. 하지만 그럼에도 불구하고 중요한 부분을 다뤘다고 생각한다. 프로그래밍을 처음 시작하는 많은 이들이 VC++을 띄우고 cpp파일을 추가하지 못하거나 main()함수를 하나 짜고싶은데 콘솔모드 프로젝트 만드는걸 몰라서 관두곤 한다. 웃을일이 아니다. 정말로 많이 봤다. 필자도 처음 시작할 당시에 베개만한 VC++책을 빌려다가 본 적이 있었다. 아무리 봐도 내가 원하는..허연 화면에 main()함수부터 짜는 방법을 찾을 수 없었다. 내가 처음 배운건 그 백지 화면에 main()함수로 시작하는 그런 거였는데 말이다. 그리고 게임 프로그래밍에선 아주 많이 쓰이는 그 화면인데도...시중에 많이 돌아다니는 VC++책은 MFC 클래스 위저드 사용법만을 다루는게 대부분이다. 그러니까 무슨 편집장 만들기, 뭐 만들기 등등... 해갖고는 화면에 쓱싹 그리고 더블클릭해서 몇 줄 써주고 그럼 뭔가 돌아가는..그런거 책에서 많이 보셨을 거라 생각한다. 꼭 나쁘다..라고 말하는 것은 아니다. 그러나 초보자에겐! 절대로! 도움이! 안된다!는 사실을 말해두고 싶다. MFC는 C++과 윈도우즈 프로그래밍을 모두 안 후에야 손댈만한 것이다. 책에 있는대로 클래스 위저드만 가지고 이렇게 저렇게 따라해 봐야 그 예제 만드는 법을 외울 수는 있을지 몰라도 결코 자신이 원하는걸 만들 수는 없다. 내용을 아는게 중요하다.
그 내용을 알고 짜기 위한 첫걸음으로 텍스트 모드, 콘솔모드 프로그래밍을 시작하고자 하는 것이다. 화려한 게임 프로그래밍을 기대했던 독자들, 너무 실망 마시고 차근차근 강좌를 읽어보면 기초에 꽤 도움이 될지도 모른다.

자 그럼 다음 편에는 C/C++의 문법과 원리를 알아보자.













파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수
83 여치의 프로그래밍 강좌 #6 file [1] 여치 2005-07-27 29846
82 여치의 프로그래밍 강좌 #5 file 여치 2005-07-27 42032
81 여치의 프로그래밍 강좌 #4 file 여치 2005-07-27 39350
80 여치의 프로그래밍 강좌 #3 file 여치 2005-07-27 35348
» 여치의 프로그래밍 강좌 #2 file 여치 2005-07-27 31837
78 여치의 프로그래밍 강좌 #1 file 여치 2005-07-27 30037
77 지형도 BSP를 사용하시나요? [1] 초보 2005-07-06 26492
76 DirectX 입문용으로 적절한 책이 있을지요? [2] MiR 2005-03-01 41287
75 [re] DirectX 입문용으로 적절한 책이 있을지요? [1] 여치 2005-03-02 30297
74 BSP/Portal/PVS에 대한... guest 2005-02-18 24490
73 [re] BSP/Portal/PVS에 대한... file 여치 2005-02-19 23534
72 3D가속에 관한 질문 [3] 바하무트 2004-12-29 37321
71 [re] 3D가속에 관한 질문 여치 2004-12-29 27613
70 [질문] HeightMap의 퍼포먼스... [1] croove 2004-11-01 28868
69 [상담] 어떻게 해야할까요? . 2004-08-20 26046
68 [re] [상담] 어떻게 해야할까요? [1] 여치 2004-08-21 29021
67 [질문] 힙메모리 라이브러리에대해서. clever98 2004-08-08 32744
66 [re] [질문] 힙메모리 라이브러리에대해서. [1] 여치 2004-08-08 30295
65 [re] [질문] 단편화의 제거는 어떤식으로 하시나요? [1] 웰치스포도주스 2004-11-23 27815
64 개발 인력에 대한 질문 [1] 방문객 108 2004-07-20 23064



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet