이번시간은 C언어 정리 네번째 시간으로 C언어의 함수와 프로그램 구조에 대해서 알아보자.

1. 함수의 기초

함수란 무엇인가?

함수는 많은 연산작업들을 작은 여러개의 연산작업들도 세분하여 프로그래머들로 하여금 처음부터 큰 프로그램을 작성해야 하는 어려움을 덜게 해준다.
함수의 적당한 사용은 자세히 알 필요 없는 세세한 연산들을 감추어 주므로 전체적으로 프로그램이 명확해지며 수정을 용이하게 해준다.

예를들어 특정한 문자열이나 패턴을 포함하는 라인을 출력하는 프로그램을 작성한다고 하면

while(행이 있는 동안)
if(그 패턴이 행 속에 있으면)
그 행을 출력한다.


이렇게 하면 된다.

이것을 main 루틴에서 구현할 수도 있으나, 각 부분을 독립적인 함수로 만들어서 구조화하는 것이 더욱 효과적이다.

그럼 함수는 어떻게 사용할까?
C언어에서 함수 형태는 다음과 같다.

리턴형 함수이름(매개변수 선언)
{
선언문과 다른 문장들
}


리턴형에는 아무것도 리턴하지않은 void형이 있고, C에서 사용하는 각 데이터형을 사용할 수 있다.

그리고 함수는 연산된 결과값을 리턴형에 맞게 return문을 이용하여 리턴한다.

정수를 인자로 받아서 덧셈을 하는 프로그램..



그리고 C언어에서 매개변수 전달 방법에는 call by value, call by reference 두가지가 있는데 다음 포인터시간에 자세히 알아보자.

2. 외부변수

변수에는 외부 변수와 내부 변수가 있는데, 이 둘은 반대 개념이다.. ^^;

내부 변수는 함수내에서 정의되는 변수이고, 외부 변수는 함수밖에서 선언됨으로 여러 함수들이 사용할 수 있다.
함수는 항상 외부형으로 정의된다.
왜냐하면 함수내에서 또다른 함수를 정의할 수 없기 때문이다.

외부 변수를 사용하면 매개변수를 이용한 데이터 처리보다 훨씬 편리하다.
하지만 편리하다고 너무 많이 쓰게 되면 프로그램 가독성을 떨어뜨리고 함수들간 많은 데이터 연결이 필요하게 된다.

뭐든지 적당한게 제일 좋은것 같다. ^^

외부변수 예제..



3. 변수 범위 규칙(Scope Rules)

C에서 사용되는 함수들이나 외부변수들은 동시에 컴파일 될 필요는 없다.
프로그램 소스는 여러개의 파일로 나누어질 수도 있고, 이전에 컴파일된 루핀들은 라이브러리로부터 로드 될 수도 있다.
아래에 몇가지 흥미로운 의문점을 적어 보았다.

컴파일되는 동안 변수들이 올바르게 선언되도록 하려면 선언들을 어떻게 하여야 할까?
● 프로그램이 로드될 때 모든 부분들이 올바르게 연결되도록 하려면 선언을 어떻게 하여야 할까?
● 외부변수들은 어떻게 초기화시킬까?
● 같은 라이브러리를 사용하는 여러 프로그램을 링크하여 실행시켜도 변수가 중복되어 선언되지 않고 하나만 선언되는 이유는 무엇일까? 즉 #include "stdio.h"가 각 파일마다 있어도 되는 이유는?


앞으로 하나씩 답을 알아가도록 하자.

모든 변수는 범위(scope)가 있다. 범위라 함은 그 변수가 프로그램내에서 효력을 발생하는 부분이다.
외부변수는 프로그램이 끝날대 까지 효력이 유지 되고, 내부변수는 그 변수가 선언된 함수가 끝나게 되면 효력 역시 살아진다.
즉, 내부변수는 변수가 선언된 블록을 벗어나면 할당된 메모리가 자동으로 해제된다.
그래서 자동변수, 혹은 지역변수라고도 한다.

외부변수를 정의된 파일이 아니고 다른 파일에서 사용하고자 할때에는 extern문을 이용해서 외부변수를 사용하고자 하는 파일에 선언을 해야 한다.

그럼 선언정의에 대한 의미부터 알아야 하는데, 선언은 변수의 성질을 나타내는 것이고, 정의는 실제로 메모리가 할당되도록 하는 것이다.
즉, 현재 파일에서 외부변수로 int a; 라고 정의하면 a를 위한 기억공간이 할당된다.
그리고 다른 파일에서 이 a변수를 사용하기 위해서 extern int a; 라고 선언하면 이것은 변수의 성질과 형만 선언하게 되고 기억공간과는 전혀 상관이 없게된다.

쉽게 말해서 현재 파일의 외부변수 앞에 extern이 붙어 있으면 이 변수는 현재 파일이 아닌 다른 어느곳에서 정의가 되었고 메모리가 할당 되었다고 생각하면 되는 것이다.

4. 헤더 파일

헤더파일은 확장자가 .h인데, 각 c파일들이 공통으로 사용하는 부분을 헤더파일에 선언해 놓고 각 c파일들이 이 헤더파일을 include 하는 방식을 사용한다.
#include 는 뒤에 붙는 파일을 현재 위치에 그대로 펼쳐주는 역할을 한다.

헤더파일은 컴파일 될때는 #include문에 의해서 각 c파일에 확장되어서 컴파일 된다. 즉, 헤더파일만 따로 컴파일 되는 것이 아니다.
혹시 헷갈리시는 분이 있을까 하여... ^^;

그리고 같은 헤더파일을 여러 c파일에서 include 하여도 변수들이 중복 되지 않는 이유는 헤더파일을 다음과 같이 코딩하기 때문이다.

#ifndef _TEST_H_
#define _TEST_H_
내용
#endif


위의 '내용'은 딱 한번만 수행이 된다.
그러므로 여러 파일이 include해도 '내용'은 중복이 안되는 것이다.

5. 정적변수(Static Variables)

static은 정적변수를 선언하기 위함인데, 변수 데이터형 앞에 사용된다.
예) static int a;

외부변수에 사용하면 그 변수는 현재 파일에서만 사용할 수 있게된다.
내부변수에 사용하면 그 변수는 외부변수화 되어서 현재 블록을 빠져나가도 효력이 유지된다.
내부변수이지만 외부변수처럼 쓰기 위해서 자주 사용한다.

6. 초기화

C 프로그램에서 초기화는 아주 중요하다.
왜냐하면 외부변수는 별다른 초기화가 없을 경우 0으로 자동 초기화 되지만, 내부 변수는 별다른 초기화가 없을 경우 정의가 되지 않은 쓰레기 값이 들어가게 됨으로 프로그램이 정상동작을 하지 않을 수도 있다.
C컴파일러는 이것을 오류로 보지 않기 때문에 초기화의 중요성은 더해지는 것이다.

항상 어떠한 변수든지 초기화 하는 습관을 가지자!!

7. 재귀호출(Recursion)

C 함수들은 재귀적으로 자기 자신을 계속 호출할 수가 있다. 이른 재귀호출 혹은 순환호출이라고 하는데, 현재 함수 어느 위치에서 자기자신을 다시 재귀호출하게 되면 그 재귀호출된 함수의 내부변수들은 또다른 메모리 공간을 가지게 된다.

즉, 재귀호출을 계속하면 같은 함수내의 같은 변수지만 다른 메모리 공간을 계속 가지게 되는것이다.

재미있지 않은가?? ^^;

이것으로 이번시간은 마치도록 하겠다..
다음시간에는 C언어의 꽃이라고 할 수있는 포인터와 배열에 대해서 알아보자!
2005/09/07 18:02 2005/09/07 18:02
오케바리*^^* 이 작성.

들어가기에 앞서..



오늘은 C언어제어흐름에 대해서 알아보겠다.

제어흐름이란 쉽게 말해서 계산순서를 정하는 것이다.
C언어로 작성된 코드가 흘러가는 순서가 되는 것이다.

1. 문장과 블록


C언어를 사용함에 있어서 가장 기본이 되는것이 문장블록 개념이다.
다 아는 내용이겠지만 항상 기초가 중요하기 때문에 개념만 알고 넘어가자.
x=0, i++. printf(...)등과 같은 것은 수식(expression)이고, 이들이 ;으로 끝나면 문장이 되는것이다.
즉, C언어에서 ;은 문장의 끝을 나타내며, 문장과 문장을 분리하는 역할을 한다.

블록은 '{' 로 시작하여 '}' 로 끝나는 것을 블록이라하고, 여러개의 선언문이나 단일문장을 모아서 또 하나의 문장을 만드는 역할을 한다.
함수를 생각해보면 쉬울것이다.

그럼 이제 제어문에 대해서 알아보자.

2. if - else 문


직관적으로 보면 알 수 있을 것이다.

if(수식)
문장1;
else if(수식)
문장2;
else
문장3;


여기서 수식은 그 수식의 결과값을 의미한다.
즉, if() 여기서 괄호안의 값이 참이냐 거짓이냐에 따라서 그 if문 문장을 수행 하느냐 안하느냐가 나뉘게 된다.
그리고 문장이 하나가 넘어 갈경우 블록을 이용해서 한문장으로 만들 수도 있다. 즉,
if(수식)
{
문장1;
문장2;
}

이렇게도 가능하다.

3. switch 문


switch 문장은 다중결정의 하나로서 수식이 상수값에 일치하는지를 알아보고 그에 따른 쪽으로 분기 시킨다.

switch(수식) {
case 상수1:
문장1;
break;
case 상수2:
문장2;
break;
default:
문장3;
break;
}


위의 수식의 값이 각 상수와 일치하는 case의 문장이 수행된다.
일치하는 상수가 없을때는 default 의 문장이 실행된다.
default는 생략해도 괜찮다.
breakswitch에서 빠져나가는 역할을 한다.
현재 switch문 이외의 다른 코드가 없다면 break대신 바로 return을 하여 switch문을 빠져 나와도 상관없다.

문자분류 프로그램 보기..



4. 순환문 (while , for)


이미 앞에서 whilefor문을 보았다.

while(수식)
문장;


for(수식1; 수식2; 수식3;)
문장;


while문은 수식의 값이 참이면 문장을 수행을 반복하고 거짓이면 루프를 빠져 나온다.

for문은 수식1이 초기값이고 수식2가 문장 수행을 반복할 조건문, 수식3은 그 조건에 관계한 수식이다.
수식2의 조건이 참일 때만 문장을 반복 수행한다.

위의 for문 예제를 아래와 같이 while문으로 바꿔 보면 이해가 빠를 것이다.

수식1;
while(수식2)
{
문장;
수식3;
}


자~ 이해가 쉽지 않은가? ^^

for문의 가장 대표적인 것이 구구단을 출력하는 프로그램이다.

구구단 프로그램 예제보기..



5. Do-While 루프


do - while 루프는 while문과 거의 비슷하다.

do
문장;
while(수식)


while문은 제일 처음 문장을 수행하기 전에 참, 거짓을 판단하는 반면, do - while문은 일단 문장을 수행하고 난 다음 while 수식의 참, 거짓을 판단한다.
do - while 문은 일단 문장이 무조건 한번은 수행 되어야 할때 유용하다.

6. Break와 Continue


어떤 경우에는 루프중에 루프를 빠져나가는 기법이 필요할 때 가 있다.
이때 사용하는것이 breakcontinue이다.
이 둘의 차이점은 break는 현재의 루프를 빠져나가 그 다음 문장을 수행 하지만, continue는 루프안에서만 사용되며 루프 안의 continue이후의 문장은 수행하지 않고, 루프의 처음으로 되돌아 간다.
continuecontinue이후의 문장이 복잡할 때 사용된다.
그리고 switch문에서는 사용이 안됨을 유의하자.

7. Goto와 Labal


C언어에서는 goto와 labal을 무한정 사용가능하다.
특히 이중루프문을 한번에 빠져 나갈때 유용하다.
보통 break를 사용하면 이중루프에서 현재 하나의 루프만 빠져나갈 수 있기 때문이다.

for(i=1; i<10; i++)
{
for(j=1; j<10; j++)
{
if(i == 5)
goto error;
}
}

error:
//error 처리


이런식으로 처리하면 편리하게 이중루프를 한번에 빠져 나갈 수 있다.
하지만 대부분 사람들이 goto문을 사용하지 말라고 한다.
왜냐하면 순차적인 처리에서 goto문을 만나게 되면 현재 위치와 전혀 다른 곳으로 분기 될 수 있기 때문에 프로그램 가독성이 현저히 떨어지게 된다.
따라서 많이 쓰면 안좋은데, 필요한 부분에서는 적당히 사용하는 것도 괜찮다.

어떤 책에서는 무조건 쓰지말라고 하는데, 그건 좀 오바인거 같고,
필요한 부분에서 적당히 사용하자.

요즘 프로그램은 예전처럼 순차적인 처리 프로그램이 아니고 객체지향적인 요소를 포함하여 굉장히 복잡하기 때문에 적당한 goto문이 오히려 약이 될 수가 있다. ^^

이것으로 이번 강의는 마치도록 하겠다.
지금까지는 C언어를 시작함에 있어서 아주 기초적인 부분만 다루었다.
다음 시간부터는 조금 깊이가 깊어질 예정이다.
따라서 필자도 머리가 좀 아푸지 않을까 염려 된다.. ^^;

다음 시간에는 함수와 프로그램 구조에 대해서 알아보자.
2005/09/02 16:49 2005/09/02 16:49
오케바리*^^* 이 작성.

이번에는 C언어 정리 세번째 시간으로 형,연산자,수식에 관해서 자세히 알아보도록 하겠다.

1. 변수와 상수


전 시간에 변수, 상수에 대해서 언급을 했는데, 약간 보충 설명을 하자면 C언어 변수명, 상수명에는 약간의 제약 사항이 있다.

변수명는 영문과 숫자로 이루어지는데 첫 글자는 반드시 영문이어야 하고 "_"도 영문으로 취급한다. 그리고 대소문자를 구분하므로 x와 X는 다른 의미가 된다.

상수는 보통 대문자로만 표현한다.

2. 데이터 형과 크기


이제 데이터 형과 크기에 대해서 알아보자.

먼저 C에는 다음과 같은 기본적인 데이터 형이 있다.

char 한 바이트의 문자
int 정수, 시스템에 따라 크기가 다르다.
float 단정도(single-precision) 부동소숫점
double 배정도(double-presision) 부동소숫점


이들 기본형에는 몇개의 한정사를 붙일 수 가 있는데 정수형에는 shortlong을 쓸 수 있다.

short int sh;
long int counter;


이런 선언문에서 보통 int 란 단어는 생략된다.
보통 short는 16bit 이상, long은 32bit 이상이 되고
short < int < long 순으로 컴파일러가 하드웨어에 따라 적당한 크기를 선택한다.

문자나 정수에는 부호형(signed) 또는 무부호형(unsigned)이라는 한정사를 붙일 수 있다.
무부호형 수는 항상 0보다 크거나 같고, 산술적 모듈러의 법칙을 따른다.
예를들어 문자가 8 bit 이면 2의 8승이 되어 0~255까지 값을 갖고, 부호형이면 -128~127까지의 값을 갖는다.

상수에는 숫자말고 문자열 상수도 있는데, 보통 "I am a string" 이렇게 사용한다. "는 문자열에 포함되지 않고 " " 안에 있는 값이 문자열이라는 것을 알려준다.
" "안의 문자열도 프로그램 실행시 바뀌지 않기 때문에 상수로 취급된다.

각 변수와 상수는 선언을 하여 사용하는데, 선언을 하게 되면 변수와 상수를 위한 메모리가 할당된다.
각 선언된 변수/상수는 {}사이에서만 메모리가 유효하다.
즉, 선언된 } 를 벗어나는 순간 메모리가 해제된다.

3. 연산자


이제는 각 연산자에 대해서 알아보자.
연산자에는 산술연산자, 관계연산자, 논리연산자, 증/감 연산자, 비트연산자, 지정 연산자가 있다.

3.1 산술연산자

산술 연산자는 +, -, *, /, %(나머지연산자) 로 구성된다.
%는 모듈러 연산 또는 나머지 연산이라고 하는데,
x % y 라고 하면 x를 y로 나눴을 때의 나머지를 나타낸다.

예를 들면 4로 나누어 떨어지고 100으로 나누어지지 않는 해는 윤년이라는 것을 이용해 다음과 같이 윤년을 판단하는 프로그램을 만들 수 있다.

if(year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
printf("%d is a leap year
", year);
else
printf("%d is not a leap year
", year);


3.2 관계연산자와 논리연산자

위의 예에서 관계연산자와 논리연산자가 사용되었는데 == != 이것이 관게연산자 이다.
== 는 왼쪽 값과 오른쪽 값이 같은지를 검사는 연산자이고,
!= 는 왼쪽 값과 오른쪽 값이 같지 않은지를 검사하는 연산자이다.
둘다 조건을 만족하면 참(1)이고 그렇지 않으면 거짓(0)이된다.
그 외 관계연산자는 >, >=, <, <= 가 있다.
의미는 직관적으로 알 수 있을 것이다.

논리 연산자는 &&(AND)||(OR)이 있는데,
&& 는 왼쪽값도 참이고 오른쪽 값도 참일때만 참이 되고 나머지는 모두 거짓이 된다.
|| 는 왼쪽값이나 오른쪽 값중에 하나만 참이면 참이 되고 모두 거짓일때만 거짓이 된다.

3.3 증/감 연산자

C에서는 변수를 증가 시키거나 감소시키는 연산자가 두 개가 있다.
증가 연산자 ++은 오프랜드에 1을 증가시키고, 감소 연산자 --는 1을 감소한다.
a++ a = a + 1; 이리는 의미가 된다.
여기서 하나 중요한 것은 ++의 위치 이다.

a++ ++a 는 어떤 차이가 있을까?
a++ 는 수행이 끝난 뒤에 1을 증가 시키고, ++a 는 1을 증가 시키고 수행한다.

그러니깐
a = 0;
if(a++)
{
}


a = 0;
if(++a)
{
}

는 완전히 다른 결과가 된다.

처음것은 if조건이 거짓이 되고, 두번째 것은 if 조건이 참이 된다.
왜 그런지 잘 생각해 보시길~~ ^^

3.4 비트 연산자

C에는 6개의 비트 연산자가 있다.

& 비트방식 AND
| 비트방식 inclusive OR
^ 비트방식 exclusive OR
<< 좌측이동(Left shift)
>> 우측이동(Right shift)
~ 1의 보수(단일 연산자)


좀 어려운가?? ^^;

&(AND)는 비트의 mask를 뜨기 위해 자주 사용된다.
예를 들어 n = n & 0x15 라고 하면
n는 n이 현재 가지고 있는 값에서 하위 4비트만 mask 되어서 다시 n으로 저장된다.
쉽게 말해 n이 무슨 값을 가지던지 하위 4비트만 다시 저장되도록 되어 있는것이다.
왜냐하면 0x15는 16진수이고 이것을 2진수로 바꾸면 0000 1111 이 된다.
&는 둘 중 하나면 0이면 0이 되기 대문에 n 값중 하위 4비트만 남게 되는 것이다.

|(OR)는 bit를 set 하는데 사용한다.
예를 들어 n = n | 0x01 이라고 하면
n 의 하위 첫 비트가 1이 된다.
|는 둘중 하나만 1이면 1이 되기 때문에 현재 값의 특정 비트에 값을 쓸수 있는 것이다.

그럼 set 한 비트를 clear 하고 싶을때는 어떻게 해야 할까?
위의 예를 사용하면
n = n & (~0x01) 이라고 하면 된다.
이유는 잘 생각해 보시길~~ ^^;

힌트.. ~는 틸드라고 부르는데 보수를 의미한다.
즉 2진수로 봤을때 0000 0011 의 보수는 1111 1100 가 된다.. ^^

3.5 지정 연산자

i = i + 2 이것은 i += 2 라고 바꿀 수 있는데,
+= 이것이 지정 연산자 이다.

별로 어렵지 않다.
(expr1) = (expr1) + (expr2) 이것을
(expr1) += (expr2) 이렇게 줄인것이다.

+ 만 되는 것이 아니라 모든 산술연산자가 가능하다.

이것으로 형, 연산자에 관한 정리를 마치도록 하겠다.
다음에는 제어문에 대해서 알아보자.
2005/08/24 17:07 2005/08/24 17:07
오케바리*^^* 이 작성.

이번에는 C언어 정리 두번째 시간으로 변수와 상수 및 수식표현에 대해서 알아보자.

1. 변수


변수가 무엇인가?
사전적 의미로는 '수식 따위에서, 일정한 범위 안에서 여러 가지 수치로 변할 수 있는 수' 이다.
쉽게 말해서 변할 수 있다는 뜻이다.
반대 개념으로는 상수가 있다. 상수는 프로그램내에서 절대로 변하지 않는다.
상수의 개념은 뒤에서 자세히 다루도록 하겠다.

화씨 온도를 섭씨 온도로 바꾸어 출력하는 프로그램을 작성한다고 하면 어떻게 해야 할까?
물론 에디터로 코딩을 해야한다... ^^;
그래도 무작정 할수 없으니 화씨를 섭씨로 바꾸어 주는 공식을 알아야 하겠다.
공식은 섭씨 = (5 / 9) * (화씨-32) 이다.
이제 공식도 알았으니 프로그램을 다음과 같이 코딩하면 된다.


결과는 다음과 같다.


C에서는 모든 변수를 사용하기 전에 선언을 해주어야 한다.
int fahr, celsius;
int lower, upper, step;

이것 처럼 말이다.
fahr, lower 등은 변수 이름이고 앞에 int는 이 변수형이 정수(integer)형이라는 것을 알려준다.
변수에는 여러가지 형이 있는데 뒷장에서 자세히 설명할 것이다.

그리고 while()문도 나오는데, 이것은 ()안의 조건이 참이면 계속 반복하는 루프문이다.
이것도 뒷장에서 자세히 설명할 것이다.

2. 수식표현


그럼 수식표현은 무엇인가?
celsius = 5 * (fahr-32) / 9;
이것이 수식표현이다.

= 뒤의 수식을 계산해서 결과값을 celsius 변수에 저장해 준다.
뒤의 수식은 사칙연산에 따른 우선순위가 적용된다.
즉 괄호를 빼면 전혀 다른 연산결과가 나오게 된다.
수식이 바뀌면 결과도 바뀌고 celsius 값도 바뀌기 때문에 변수라고 칭하는 것이다.
앞에서도 언급했지만 값이 바뀌지 않으면 변수가 아니고 상수가 된다.

조금 자세히 설명하자면 celsius 변수가 선언될때 메모리가 할당 되고 = 에 의해 메모리에 값이 쓰여지게 된다.

그런데 C에서는 변수의 형이 정수형이라면 수식에 의한 연산 결과가 실수라고 해도 정수로 저장이 된다.
즉 5/9는 0이 되는 것이다.

그럼 실수로 저장이 되게 할려면 어떻게 해야 할까?
간단하다.
변수 선언할때 실수형(float)으로 선언을 하면 된다. ^^
그리고 소수점자리 이하까지 출력하기 위해서는 printf문에서 %d 이부분을 %f로 바꿔주면 된다.
%d는 정수형 출력을 의미하고 %f는 실수형 출력을 의미하기 때문이다.

그럼 섭씨가 소수점 이하까지 나오도록 수정하는건 쉬울것이다. ^^

3. 상수


이제 상수에 대해서 알아보자.
상수는 앞에서도 언급했지만 변하지 않는 수이다.

프로그램내에서 사용하는 숫자가 상수가 될것이고 #define 문으로 선언하는 것도 상수가 된다.

앞의 소스로 예를 들면
lower = 0;
upper = 300;
step = 20;

이부분을 #define 문으로 바꿔주면

#define LOWER 0
#define UPPER 300
#define STEP 20

이렇게 된다.

프로그램내에서 LOWER은 컴파일시 0으로 대체된다.
즉 #define A a 하면 소스상에 A가 컴파일시 a로 대체되는 것이다.

만약 LOWER값이 바뀌었을때 #define문을 사용하게 되면 그 부분만 바꾸어주면 되므로 수정하는데 시간을 많이 절약 할 수 있다.

그리고 변수와 상수를 구별하기 위해서 상수는 보통 대문자를 사용하게 된다.
이건 규칙이 아니니 꼭 따를 필요는 없지만, 그래도 지켜주는 것이 가독성도 높이고 여러가지로 좋을 것이다. ^^*

그럼 이것으로 변수와 상수 및 수식표현에 관한 정리는 마치도록 하겠다.
2005/08/23 16:57 2005/08/23 16:57
오케바리*^^* 이 작성.

들어가기에 앞서..



1. 시작


모든 언어가 그렇듯 처음 배울때는 무조건 따라 해보고 안되면 수정하고 또 해보고...
나의 경험으로 비추어 봤을때...
처음에는 무조건 몸으로 부디쳐 보는게 제일 좋은 방법인거 같다.

많이 봤을것이다.

"hello, world"

자, C를 이용하여 이 문구를 화면에 출력해야 한다.
어떻게 해야 할까?
일단 에디터를 이용하여 프로그램을 작성하고 컴파일과 링크후 실행하면 화면에 위의 문구가 출력된다.

컴파일과 링크를 합쳐 빌드라고도 칭하며
빌드는 각 시스템 환경에 따라 다르다.

처음 .c파일을 컴파일 하면 .o 라는 오브젝트(목적)파일이 생성되고 이 파일이 lib와 같이 링크 되면서 .exe 파일 혹은 .dll 파일이 생성된다.

실제 소스는 아래와 같다.
-------------------------------------------------------------
#include "stdio.h"

int main()
{
printf("hello, world
");
return 0;
}
-------------------------------------------------------------
C프로그램은 항상 하나 이상의 함수로 구성된다.
C의 함수라는 것은 FORTRAN의 함수나 PL/1이나 Pascal의 프로시져와 비슷하다.
함수의 이름은 원하는 대로 붙일 수 있지만 주 프로그램의 이름은 꼭 main이라고 해주어야 한다.
main은 대개 다른 함수들을 호출하게 되는데 같은 프로그램 내에 있는 함수를 호출 할 수도 있고, 라이브러리에 있는 함수를 호출 할 수도 있다.
라이브러리는 여러 개가 있고 그 중에서 우리가 사용하고 있는 함수가 어떤 라이브러리에 있는지 프로그램에 명시해 주어야 한다.
위 프로그램에서 사용한 함수는 printf이며 이 함수는 stdio(표준 입출력 라이브러리)에 있으므로 #include 전처리문을 이용하여 include 한다.
전처리문에 대해서는 뒷장에서 상세히 설명할 것이다.
간단히 #include 뒤에 오는 파일의 내용을 현재 위치에 그대로 펼쳐 준다라고만 알고 넘어가자.

또하나 주목 할 것은
이다.
이것은 개행문자인데, 즉 한행을 띄어 주는것이다.
이런 문자를 escape 문자라고 하는데 출력 양식을 정해주는 역할을 한다.

개행을 의미하고 는 tab키의 역할, ?는 backspace(←)키의 역할을 한다.
화면에 를 출력하고 싶을때는 와 같이 써야 하고 "를 출력하고 싶을때는 "라고 써야 한다.

이 예제를 실행한 모습이다.


다음 시간에는 변수와 상수 및 수식표현에 대해서 알아보겠다.
2005/08/23 15:19 2005/08/23 15:19
오케바리*^^* 이 작성.