글수 49
오류가 있으면 댓글로 바로바로 지적해 주세요...
========================================================
#03.초보가 쓰는 C 언어 강좌
(C 언어의 기본 구성요소)
03. C 언어의 구성
맨 처음 제가, 프로그램이란 컴퓨터를 동작하게 만드는 것이라고 말했습니다. 이 동작하게 만드는 것은 한마디로 말하자면 컴퓨터에게 명령을 내리는 거라고 할 수 있습니다. 컴퓨터로 할 수 있는 동작이 너무나 많은 사항들이 있다보니 이 때는 이렇게 하고, 이 때는 이렇게 하라는 매뉴얼을 짜는 것과 같습니다. 이런 매뉴얼은 매우 긴 글이기 때문에 프로그램을 글과 비교하는게 좋을 것 같군요.
C언어로 짜어진 프로그램을 한편의 글로 비교하자면, 글에서 기본이 되는 문장은 C언어에서 statement라고 부릅니다. Statement는 보통 우리말로 '문장' 또는 "명령문" 이라고 번역합니다. 마치 문장끝에 마침표가 있는 것처럼, statement는 꼭 세미콜론(;)으로 끝납니다.
한 문장에서 동사, 명사, 형용사 등 여러가지 품사로 그 단어의 성격을 구별하듯이 Statement 는 다시 토큰으로 구별할 수 있습니다. 토큰은 키워드, 심볼(또는 명칭 : identifier), 상수, 문자열, 연산자, 분리자 이렇게 총 6가지로 구성되어 있습니다.여기서 분리자는 나머지 것들을 분리해주는 역활을 해주는 여러가지 공백(space, tab, newline 등)으로 구성되어 있습니다.(6개의 토큰으로 분류하는 것은 K&R책 참고함)
03.01 주석(Comment)
6개의 구성요소는 아니지만 프로그래밍에서 중요한 요소 중에 하나므로 가장 앞에 집어 넣었습니다.
프로그램 소스 안에서 그 프로그램을 설명하려고 할 때 사용합니다. C 언어의 주석은 /* */ 같은 꼴을 가집니다. 저 사이의 내용은 컴파일 되지 않습니다.
/* 이 곳은 컴파일 하지 않는다. */
/* /* */ */ 이런 식으로 중복해서 지정하실 수는 없습니다.
이 주석은 여러줄에 걸쳐서 사용할 수 있습니다.
C99 들어서 C++ 에서 사용했던 한 줄 주석 // 가 표준으로 인정받았습니다.
// 다음 부분은 그 줄 끝까지 주석이 됩니다. (Visual C++ 6.0 이 C99 를 지원하지는 않지만 한 줄 주석은 지원합니다. Dev-cpp는 C99를 지원하는 것 같군요.) 다시말해 엔터를 치는 순간, 주석의 효력이 사라지게 됩니다.
주석은 프로그램에 영향을 전혀 미치지 않습니다. 따라서 주석의 용도는 코드를 나중에 다시 이 프로그램을 볼 때 알 수 있도록 설명을 덧 붙이는 것입니다. 긴 프로그램을 짜다 보면 자신이 무엇을 하다가 이러한 코드를 만들었는지 잊어버리는 경우가 있습니다. 그래서 주석을 꼭 달아 주세요. 주석을 안 달게 되면 분명히 후회하는 날이 있습니다.
03.02 키워드(Key Word)
컴파일러에 int var; 라고 타이핑해 보세요. 보통 int 는 조금 특별한 색을 띄게 됩니다. 이렇게 특별한 색을 띄는 것의 대부분을 키워드라고 보시면 됩니다. 키워드는 컴파일러에게 어떠한 일을 할 것임을 알려주는 역할을 합니다.
키워드 하나하나가 가진 의미는 강의를 계속 하다보면 알게 됩니다.
03.03 C언어에서의 키워드
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
03.04 심벌(Symbol,또는 명칭 : identifier)
앞에서 int var 라고 했을 때 var 라는 것이 심벌입니다. 키워드는 컴파일러가 정해준 것이라면 심벌은 우리가 정하는 것입니다. 심볼은 변수나 함수를 만들 때 사용합니다. 보통 변수나 함수의 성격을 나타내는 단어를 심벌로 사용합니다.
심볼을 만들때는 영문 대, 소문자, 숫자 와 _(언더바)를 이용해서 만듭니다. 그리고 첫 글자는 영문자나 _(언더바)로 시작해야 합니다. 그리고 키워드와 겹치면 안됩니다. 그리고 심볼은 대소문자를 구분합니다. 심볼만이 아니라 C언어에서는 대소문자 구별이 엄격합니다. 이 말은 int 라고 치면 글자 색깔이 변화면서 키워드임을 알려주지만 Int 나 inT Int 라고 치면 대소문자가 다르므로 키워드가 아닙니다. 따라서 이런것 들을 심벌로 사용하여 변수나 함수를 만들수 있습니다. 그러나 혼란을 주기 때문에 보통 잘 안 사용합니다.
심볼만드는 예)
Variable (영문자이므로 O) Var_X (O)
7486(숫자로 시작하므로 X) _7486 (언더바로 시작하므로 O)
_02-345-3455 ( '-' 라는 문자가 들어가므로 X)
상수와 문자열은 "상수"에서 설명하고, 연산자는 "연산자(1)(2)(3)"에서 설명하겠습니다.
이 글을 읽는 동안 조금 어렵게 느껴질 것입니다. 처음 배우는 사람에게는 너무 어려워 보이는 군요. 무슨 공부든 처음 배울 때는 쭉 훑어본다는 느낌으로 훑어보고 예제를 따라만 해보세요. 그리고 다시 처음으로 들어와 다시 공부하세요. 처음부터 정확히 이해하려고 하면 한 발짝 나가기가 너무 더딥니다. 처음부터 완벽히 할 필요는 없습니다. 더구나 이 강좌는 완벽한 강좌가 아닙니다. 이런 강좌 읽고 이해 할 수 없는 것은 당연합니다.
내가 중고등학교때 수학을 배우면서 이 학문은 진입장벽이 너무 높구나 하고 생각했습니다. 수학은 기초가 중요하다고 합니다. 그런데 그 기초 쌓기도 어렵죠. 예를 들어 분수에 대해 배운다고 생각해 봅시다. 그 중 기약분수에 대해 설명하다보면 최대 공약수에 대해 설명해야 합니다. 이런 식으로 분수 한 부분만 배우려고 하면 필연적으로 다른 부분에 대한 배경지식이 필요합니다.
프로그래밍 언어 또한 마찬가지입니다. 프로그래밍 언어를 배우기 위해서는 깊은 동작을 알기 위해서는 컴퓨터 구조에 대해 알아야 합니다. 또, 이 장에서 배운 키워드를 알기 위해서는 컴파일러의 구조에 대해 알아야 합니다. 학문들이 서로 단단히 얽어있기 때문에 그 배경지식을 배우려고 하면 한도 끝도 없겠죠. 그래서 우리는 대충 연약한 토대를 바탕으로 공부해야 합니다. 토대가 약하다 보면 무너져 내리는 경우도 있겠지만 그런 식으로 토대가 무너져 내려야 배우는 게 더 도움이 되겠죠.
작성자 : 한밀(승룡)
버전 : 0.1.5
이 글은 계속 고쳐지고 있습니다.
2003년 12월 어느 추운 날
최종 수정일 : 2007년 7월 하순, 날씨가 더워 잠을 못 자고 있는 어느 날
***** ljh131님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2007-08-03 14:17)
========================================================
#03.초보가 쓰는 C 언어 강좌
(C 언어의 기본 구성요소)
03. C 언어의 구성
맨 처음 제가, 프로그램이란 컴퓨터를 동작하게 만드는 것이라고 말했습니다. 이 동작하게 만드는 것은 한마디로 말하자면 컴퓨터에게 명령을 내리는 거라고 할 수 있습니다. 컴퓨터로 할 수 있는 동작이 너무나 많은 사항들이 있다보니 이 때는 이렇게 하고, 이 때는 이렇게 하라는 매뉴얼을 짜는 것과 같습니다. 이런 매뉴얼은 매우 긴 글이기 때문에 프로그램을 글과 비교하는게 좋을 것 같군요.
C언어로 짜어진 프로그램을 한편의 글로 비교하자면, 글에서 기본이 되는 문장은 C언어에서 statement라고 부릅니다. Statement는 보통 우리말로 '문장' 또는 "명령문" 이라고 번역합니다. 마치 문장끝에 마침표가 있는 것처럼, statement는 꼭 세미콜론(;)으로 끝납니다.
한 문장에서 동사, 명사, 형용사 등 여러가지 품사로 그 단어의 성격을 구별하듯이 Statement 는 다시 토큰으로 구별할 수 있습니다. 토큰은 키워드, 심볼(또는 명칭 : identifier), 상수, 문자열, 연산자, 분리자 이렇게 총 6가지로 구성되어 있습니다.여기서 분리자는 나머지 것들을 분리해주는 역활을 해주는 여러가지 공백(space, tab, newline 등)으로 구성되어 있습니다.(6개의 토큰으로 분류하는 것은 K&R책 참고함)
03.01 주석(Comment)
6개의 구성요소는 아니지만 프로그래밍에서 중요한 요소 중에 하나므로 가장 앞에 집어 넣었습니다.
프로그램 소스 안에서 그 프로그램을 설명하려고 할 때 사용합니다. C 언어의 주석은 /* */ 같은 꼴을 가집니다. 저 사이의 내용은 컴파일 되지 않습니다.
/* 이 곳은 컴파일 하지 않는다. */
/* /* */ */ 이런 식으로 중복해서 지정하실 수는 없습니다.
이 주석은 여러줄에 걸쳐서 사용할 수 있습니다.
C99 들어서 C++ 에서 사용했던 한 줄 주석 // 가 표준으로 인정받았습니다.
// 다음 부분은 그 줄 끝까지 주석이 됩니다. (Visual C++ 6.0 이 C99 를 지원하지는 않지만 한 줄 주석은 지원합니다. Dev-cpp는 C99를 지원하는 것 같군요.) 다시말해 엔터를 치는 순간, 주석의 효력이 사라지게 됩니다.
주석은 프로그램에 영향을 전혀 미치지 않습니다. 따라서 주석의 용도는 코드를 나중에 다시 이 프로그램을 볼 때 알 수 있도록 설명을 덧 붙이는 것입니다. 긴 프로그램을 짜다 보면 자신이 무엇을 하다가 이러한 코드를 만들었는지 잊어버리는 경우가 있습니다. 그래서 주석을 꼭 달아 주세요. 주석을 안 달게 되면 분명히 후회하는 날이 있습니다.
03.02 키워드(Key Word)
컴파일러에 int var; 라고 타이핑해 보세요. 보통 int 는 조금 특별한 색을 띄게 됩니다. 이렇게 특별한 색을 띄는 것의 대부분을 키워드라고 보시면 됩니다. 키워드는 컴파일러에게 어떠한 일을 할 것임을 알려주는 역할을 합니다.
키워드 하나하나가 가진 의미는 강의를 계속 하다보면 알게 됩니다.
03.03 C언어에서의 키워드
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
03.04 심벌(Symbol,또는 명칭 : identifier)
앞에서 int var 라고 했을 때 var 라는 것이 심벌입니다. 키워드는 컴파일러가 정해준 것이라면 심벌은 우리가 정하는 것입니다. 심볼은 변수나 함수를 만들 때 사용합니다. 보통 변수나 함수의 성격을 나타내는 단어를 심벌로 사용합니다.
심볼을 만들때는 영문 대, 소문자, 숫자 와 _(언더바)를 이용해서 만듭니다. 그리고 첫 글자는 영문자나 _(언더바)로 시작해야 합니다. 그리고 키워드와 겹치면 안됩니다. 그리고 심볼은 대소문자를 구분합니다. 심볼만이 아니라 C언어에서는 대소문자 구별이 엄격합니다. 이 말은 int 라고 치면 글자 색깔이 변화면서 키워드임을 알려주지만 Int 나 inT Int 라고 치면 대소문자가 다르므로 키워드가 아닙니다. 따라서 이런것 들을 심벌로 사용하여 변수나 함수를 만들수 있습니다. 그러나 혼란을 주기 때문에 보통 잘 안 사용합니다.
심볼만드는 예)
Variable (영문자이므로 O) Var_X (O)
7486(숫자로 시작하므로 X) _7486 (언더바로 시작하므로 O)
_02-345-3455 ( '-' 라는 문자가 들어가므로 X)
상수와 문자열은 "상수"에서 설명하고, 연산자는 "연산자(1)(2)(3)"에서 설명하겠습니다.
이 글을 읽는 동안 조금 어렵게 느껴질 것입니다. 처음 배우는 사람에게는 너무 어려워 보이는 군요. 무슨 공부든 처음 배울 때는 쭉 훑어본다는 느낌으로 훑어보고 예제를 따라만 해보세요. 그리고 다시 처음으로 들어와 다시 공부하세요. 처음부터 정확히 이해하려고 하면 한 발짝 나가기가 너무 더딥니다. 처음부터 완벽히 할 필요는 없습니다. 더구나 이 강좌는 완벽한 강좌가 아닙니다. 이런 강좌 읽고 이해 할 수 없는 것은 당연합니다.
내가 중고등학교때 수학을 배우면서 이 학문은 진입장벽이 너무 높구나 하고 생각했습니다. 수학은 기초가 중요하다고 합니다. 그런데 그 기초 쌓기도 어렵죠. 예를 들어 분수에 대해 배운다고 생각해 봅시다. 그 중 기약분수에 대해 설명하다보면 최대 공약수에 대해 설명해야 합니다. 이런 식으로 분수 한 부분만 배우려고 하면 필연적으로 다른 부분에 대한 배경지식이 필요합니다.
프로그래밍 언어 또한 마찬가지입니다. 프로그래밍 언어를 배우기 위해서는 깊은 동작을 알기 위해서는 컴퓨터 구조에 대해 알아야 합니다. 또, 이 장에서 배운 키워드를 알기 위해서는 컴파일러의 구조에 대해 알아야 합니다. 학문들이 서로 단단히 얽어있기 때문에 그 배경지식을 배우려고 하면 한도 끝도 없겠죠. 그래서 우리는 대충 연약한 토대를 바탕으로 공부해야 합니다. 토대가 약하다 보면 무너져 내리는 경우도 있겠지만 그런 식으로 토대가 무너져 내려야 배우는 게 더 도움이 되겠죠.
작성자 : 한밀(승룡)
버전 : 0.1.5
이 글은 계속 고쳐지고 있습니다.
2003년 12월 어느 추운 날
최종 수정일 : 2007년 7월 하순, 날씨가 더워 잠을 못 자고 있는 어느 날
***** ljh131님에 의해서 게시물 복사 + 카테고리변경되었습니다 (2007-08-03 14:17)
2007.11.25 02:07:30 (*.234.76.64)
주석에 대해서...
/* */ 주석에 대해 표준에는 어떻게 정의되어 있는지 아시나요?
왜냐하면 /* */ 중첩을 허용하는 컴파일러도 있거든요... (볼랜드 제품군이었던 것 같습니다.)
/* */ 주석에 대해 표준에는 어떻게 정의되어 있는지 아시나요?
왜냐하면 /* */ 중첩을 허용하는 컴파일러도 있거든요... (볼랜드 제품군이었던 것 같습니다.)
2007.11.25 12:51:18 (*.51.133.106)
중첩 /**/ 압박이군요
보통 주석은 indent 상관안하고 쓰지 않나요... 중첩이 가능해지면 오히려 더 복잡해질것 같아요
보통 주석은 indent 상관안하고 쓰지 않나요... 중첩이 가능해지면 오히려 더 복잡해질것 같아요

연산자도 있고 주석도 있는데. 그리고 식별자를 구성 요소로 보기에도 문제가 있는데..
이 부분을 어떻게 고쳐야 할지 고민 중 입니다.