1619, 1/81 회원가입  로그인  
   dontknow
   [자작] C이해하기 1편

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=7898 [복사]


포인트 & 이하 존칭 생략합니다

--------------------------------------------------------------------------------

C언어에 대해 궁금하다면 google.com 'c언어' 라고 검색만 해도 충분한 자료를 구할 수 있다.

사실 이러한 자료들도 초보딱지를 어느정도 떼야지 그때부터 무슨 말인지 이해가 간다.

거의 모든 강좌의 첫번째 예시가 Hello, World 인데 내용을 살펴보면

int main(){
printf("Hello, World\n");
return 0;
} 컴파일 어쩌고 저쩌고 한다

물론 그전에 컴파일러는 mingw 나 visual studio express, gcc 등을 설치해야 한다는 설명도 있지만

아무튼 이러한 내용들은 거의 일단 걸을 수 있다는 전제하에 설명되어 있다.

그런데 이러한 것들은 말로 혹은 교육을 통해서 가르치기 힘든 부분이기도 하다.

애기가 걸음마를 배울 때를 생각해 보자. 애기가 걷기 위해서는 수 없이 넘어져 보는 수밖에 없다.
이렇게도 해보고 저렇게도 해보고, 누군가 옆에서 요령을 말해줄 수도 없고(사실 말하더라도 애기가 말을 알아들을리 없고)
그냥 몸으로 터득하는 수 밖에 없다.

C언어도 마찬가지이다. 어느정도 까지는 본인 스스로 이해해야 한다. 아무리 컴파일 어쩌고 링크어쩌고 하는 설명을 쉽게 한다고 해도
못 알아듣는건 매한가지니까 말이다.

모르는걸 물어본다고 해서 누군가 가르쳐 준다고 해서 해결되는 문제는 아니다. 본인 스스로 궁금증을 만들고 이해해 나가는 수밖에 없다.

내가 생각하는 C언어 걸음마 단계는
1. int main 이러한 내용을 .c 파일로 어딘가에 저장하는것(디렉토리 파일개념, .c 로 파일을 생성하는 개념)
2. 명령어를 입력해서 실행하는 것(컴파일 명령)
3. 프로그램이라 불리어 지는 것들(컴파일러 프로그램들, 윈도우에서는 .exe, 리눅스에서는 실행권한(+x))
4. 실행한다는 의미(실행파일 더블 클릭)

최소 이런 개념은 가지고 있어야 한다고 생각된다.

위 4가지를 최소한 강좌에서 설명한 내용을 실습해보는데 무리는 없을 듯하다.

본격적으로 시작하기에 앞서
이 글을 읽는 사람은 최소한 c와 관련된 강좌 하나(1장부터 마지막장까지) 혹은 책 1권 정도는 읽었다라고 생각하고 글을 쓰겠다.

시작!!!!

main() 이라 함은 함수를 말한다. 함수중에 특별한 함수로 프로그램의 시작점을 말한다.
프로그램을 실행하기 위해서 main이 필요하다.

컴퓨터는 계산기라고 생각하면 된다.
우리가 복잡한 수학을 문제를 풀면 연습장을 사용한다. 연습장에는 중간에 계산되어 나오는 숫자를 적어놓곤 한다.

c에 사용하는 변수(variable)는 일종의 연습장에 적는 공간이라고 생각하면 된다.

char 1byte, int 4byte와 같은 byte란 단위를 사용한다.

byte를 이해하기 위해서는 bit란 개념을 알아야 된다.

bit란 1, 0 과같이 2가지의 경우를 가지는 단위이다.
on, off 일 수 있고
있다, 없다 개념일 수 있다.

1bit는 2가지 경우를 표현할 수 있으며
2bit는 4가지 경우, 3bit는 8가지 경우를 표현할 수 있다. 편의상 0,1 로 표기하겠다.

8bit를 1byte라고 한다. (100cm = 1m 인것처럼)

그리고 별도로 4bit를 nibble 이라고 한다

4bit는 16가지 경우를 표현할 수 있다.
그래서 이해하기 쉽게 4bit를 표현할 때는 16진수로 표현한다. (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)

1byte를 표현할 때는 4bit 2개를 붙여 사용한다. 1a, ff 와 같이.

컴퓨터가 16진수를 사용하는 것이 아니라 사람이 알아보기 쉽게 하려고 16진수로 표현한 것에 불과하다.

32bit cpu 는 한번에 4byte를 처리할 수 있는 것을 말한다.

char 는 1byte 이다. 256가지 경우를 표현할 수 있다.
다른말로 표현하면 0~255, -128~127 을 표현할 수 있다.

꼭 숫자를 표현하는 것은 아니다. 65를 A, 66-B 와 같은 식으로 매핑시킬수 있다.
31을 A로 매핑시켜도 된다. 사람 마음이니까.

그런데 알파벳 a를 매핑하는데 누군 10, 누군 20과 같이 통일되지 않으면 복잡해지만 할 뿐이다.
그래서 표준이란 것을 정하였다.

65를 A로 하고 97을 a로 한다로 정한 것을 ascii 라고 한다.
꼭 ascii를 안따라도 된다. 그렇게 안따르고 변형하고 복잡하게 만들어서 암호화에 쓰이기도 한다.

컴퓨터에서 byte는 일종의 공간개념이며
1byte라고 0~255 숫자만 넣을수 있은 것은 아니다. 서로다른 256가지를 담을수 있다.

문자 넣으라고 char 만든 것이 아니다. 물론 char 가 문자를 뜻하지만.

구조체도 그렇지만 c에서 자료형은 그냥 크기를 나타내는 것이라고 이해하면 메모리를 이해하는데도 도움이 많이 될 것이다.

다음편에 계속....

  Hit : 10264     Date : 2013/07/31 12:16