| [ CnUnix ] in KIDS 글 쓴 이(By): guest (guest) 날 짜 (Date): 1996년02월26일(월) 04시59분37초 KST 제 목(Title): Re: C가 뭐하는... 간략하게 컴퓨터와 프로그램에 대해서 몇마디 적어 드리겠읍니다. 그리고, 집에 컴퓨터가 있고, 책 보고 혼자서 몇시간씩 공부하는 것을 싫어하지만 않는다면 구태여 학원을 다닐 필요가 없을 듯 합니다. (웬만한 컴퓨터 학원 다녀서 얻을 것은 이미 책에 더 자세히 나와 있읍니다. 그리고, 단순히 빠른 시간에 배우기 위한 목적이 아니라, 깊이 있게 배울려면 혼자서 여러 각도에서 생각해 보면서 책을 보는 것이 더 낫습니다. 물론 어딘가에 물어볼 사람은 있어야죠.) 책은 가남사에서 나온 임인건씨가 지은 "터보 C 정복"이던가, "터보 C 완전 정복"인가 하는 책을 추천합니다. 터보 C(Turbo C, TC)는 상용인지는 모르겠지만 여기 저기 뒤져보면 손쉽게 구할 수 있을 겁니다. 사더라도 다른 볼란드 씨나 비쥬얼 씨 같은 것들보다 훨씬 쌀 것이고, C를 배우는데 있어서 Turbo C면 아주 아주 충분합니다. 제일 처음 보기에는 어려울지도 모르지만, C언어를 이용해서 할 수 있는 여러가지들에 대해서 다양하게 자세하게 나와있기 때문에, 지나치게 쉬운 책 여러권을 사두는 것보다 나중을 위해서 좋을 것입니다. 터보 씨를 이용해서 간단한 그래픽이나 파일 입출력정도를 짤 수 있고, 포인터(나중에 C를 배우면서 나옴)를 이용해서 변수들을 이용할 정도가 되면, C는 충분히 배웠다고 생각해도 됩니다. 그 다음 부터는 각 컴퓨터에 대한 하드웨어적인 지식이나 OS(dos, window, unix, os2..)등에 대한 지식을 요하는 것입니다. 그럼 이제부터, 컴퓨터와 프로그램에 대한 설명... -------------------------------------------------------------------- 컴퓨터가 0,1로 이루어진 2진수로 동작한다는 얘기는 이미 여기저기서 들었을 겁니다. 그러면 문제는 이 0,1을 사람이 바로 보고서 이해할 수 없다는 데 있읍니다. 그래서 0,1같은 2진수를 16진수로 바꾸어서 표현하기도 하고, 한 단계 더 나아가서 사람이 이해할 수 있는 의미있는 단어로 바꾸엇 표현하기도 합니다. 이와 같은 단계에 따라서, 사람이 직접적으로 이해하기 쉬운 단어들로 표현되어 있는 언어를 '고급언어'라고 하고, 컴퓨터가 직접적으로 이해할 수 있는 언어를 '기계어'라고 합니다. C, Cobol, Fortran, Basic, Pascal, Lisp 등등 여러 종류의 고급언어가 있고, CPU 종류에 따라서 또 여러 종류의 기계어들이 있읍니다. 그럼 이와 같은 언어들을 이용해서 우리가 원하는 작업을 수행할 수가 있는데, 예를 한가지 들어보이겠읍니다. 예) 1과 1을 더해서 그 결과를 변수 A에 대입하시오. (우리나라말) Please add 1 and 1, and put the result into variable A. (영어) 어쩌구 저쩌구. (중국어, 독어, 불어, 일어..기타 등등) 10 A = 1 + 1 (Basic) A = 1 + 1 ; (C언어) ADD 1, 1 (어셈블리어) 00 D8 01 01 (기계어, 16진수 표현) 0000 0000 1101 1000 0000 0001 0000 0001 (기계어, 2진수 표현) 위의 예들을 보면, 같은 작업을 하는데 있어서 모두 제각기 다른 표현을 사용하고 있음을 알 수 있읍니다. 그리고, 우리가 이해하는 것은 제일 위의 두줄 정도이고, 컴퓨터가 이해하는 것은 제일 밑의 2줄 뿐입니다. 한 마디로 서로간에 의사소통이 안 되는 것입니다. 그래서, 그 중간 단계를 두어서 사람도 이해하고 컴퓨터도 이해하자는 것이 프로그래밍 언어입니다. 사람이 일단 자신의 생각을 프로그래밍 언어를 통하여 표현을 해 주면, 콤파일러(또는 인터프리터, compiler, interpreter)가 컴퓨터가 이해할 수 있는 기계어(PC의 *.obj)로 바꾸어 주게 되고, 링크라는 것은 이 기계어로 바뀌어진 프로그램 하나 또는 여러개를 모두 모아서 실행 가능한 형태로 (PC의 *.exe)만들어 주는 작업을 해 주는 것입니다. (게임프로그램을 짤 때 그 큰 프로그램을 단 번에 만드는 사람은 없을 겁니다. 여러명이 모여서 누구는 조이스틱입력을 받는 부분을 짤 테고, 누구는 화면에 비행기 날라가는 것을 짤 테고. 이렇게 여러개로 나누어진 것을 모아서 하나로 만드는 작업이 바로 link, 즉, 기계어로 변환된 프로그램들간의 연결을 만들어 주는 것을 의미합니다.) 다시 정리하면, 콤파일(또는 인터프리터)는 고급언어를 기계어로 바꾸어 주는 것이고, 링크는 기계어로 바뀐 프로그램들간의 연결을 만들어서 실행가능하도록 해주는 것입니다. (따라서, 프로그램이 작으면 한번의 콤파일과 링크로 실행파일이 만들어지고, 프로그램이 커지면 각 부분별로 콤파일을 한 후, 링크를 통해서 하나의 실행파일을 만들게 됩니다.) ------------------------------------------------------------------------ 고급언어로 작성된 프로그램을 컴퓨터에 입력시키는 방법은 여러가지가 있읍니다. 요즘 흔하게 쓰이는 방법은 에디터를 이용해서 작성한 것을 컴파일러가 읽어서 콤파일하는 방법이지만, 예전에는 종이에 구멍을 뚤어 놓으면(요즘의 OMR카드에 번호에 색칠하는 것처럼) 그것을 컴퓨터가 읽는 방법도 사용했었고... 에디팅은 HWP를 이용하고, 그것을 터보 씨나 어셈블러 콤파일러에 입력시켜도 되고, 아니면 컴파일러 자체가 가지고 있는 에디터를 이용해도 되고, 어느 것이든 상관이 없읍니다. 즉, 어떤 방법이든 컴파일러가 이해할 수 있는 파일 형식으로 저장하기만 한다면야... 대부분의 PC사용자들은 에디터를 컴파일러에 내장되어 있는 것을 이용하지만, 일반적인 Unix의 경우는 에디터와 컴파일러가 완전히 구분되어 있는 것을 사용합니다. 정리하면, 에디터는 내장되어 있는 것을 쓰든, 자기가 평소에 사용하던 것을 쓰든, 일단 파일로 저장을 하면 그것을 컴파일러가 읽어서 기계어로 바꾸어 줍니다. 내장되어 있는 에디터를 사용하는 경우라면 단축키를 어떻게 누르면 컴파일과 링크를 하도록 설정되어 있을 것이고, 내장된 에디터가 아니라면 도스 프람프트(prompt) 상에서 아래와 같이 명령을 타이핑하면 되겠죠. 예) C:\> TCC.EXE FILENAME.C (터보씨의 경우) (터보 C에서, TC.EXE는 컴파일러와 링커 이외에 단축키나 여러 설정이 되어 있는 에디터가 같이 들어 있는 것입니다. TCC.EXE는 순수한 콤파일러와 링커) C든 어셈블러든, 위와 같이 컴파일러 또는 링커의 실행파일� 이름을적고, 그 뒤에 작성한 파일의 이름을 적어주면 됩니다. 아니면, 내장되어 있는 에디터를 사용해도 됩니다. --------------------------------------------------------------------- VOID에 관한 질문은 프로그램에 대한 공부가 어느 정도 되기 전까지는 대답을 해도 의미가 없을 것 같군요. VOID를 제대로 이해할려면 함수(function)와 함수의 반환값(return value)이 무엇인가부터 이해해야 합니다. 함수와 반환값이 무엇인지는 중 1 수학책의 함수부분을 충분히 숙지한 상태에서 프로그램밍 책을 붙잡고 2-3주 정도 직접 컴퓨터앞에서 프로그램을 작성해 보면 자연스럽게 알게 될 겁니다. |