본문 바로가기

programming/C언어

C언어의 시작, Hello World!

728x90
반응형
C언어 시작하기

프로그래밍 언어는 인간과 컴퓨터가 대화를 하기 위한 언어입니다. 인간이 명령을 내리고 컴퓨터가 실행하기 때문에, 기계어보다는 C 언어처럼 인간이 사용하는 언어와 가까운 고급 언어를 사용하죠

https://www.opentutorials.org/module/3921/23496

아래의 코드를 코드블록에 직접 작성하고 컴퓨터와의 대화를 시도해봅시다!

1

2

3

4

5

#include <stdio.h>

main ()

{

printf ( “Hello world”);

}

실행결과
위 프로그램을 실행하면 “Hello world”라는 결과가 나타납니다.                                                                         (만약 사진이 보이지않는다면 새로고침 해주세요)


여러분은 "Hello world"를 출력하는 프로그램을 만든 거에요!!

4행에서 컴퓨터에게 “Hello world”를 출력하라는 명령을 내리고, 그 명령에 따라 컴퓨터가 문장을 출력하는 것이죠

main()과 헤더 파일

c언어 프로그램을 만들기 위해서는 헤더 파일과 main()이 꼭 있어야 합니다.
그럼 main()과 헤더 파일은 무엇일까요?

main()

c언어 소스 코드에는  main()이 꼭 있어야 하고, 사용하는 명령들의 내용이 미리 기록된 헤더파일을 참조하여 프로그래밍 합니다.

소스 코드 – 사용자가 작성한 코드로 컴파일러에 의해 번역되지 않은 상태의 프로그램 파일(*.c)을 뜻합니다.

컴파일러 – 고급언어 프로그램(C/C++등)을 기계어로 번역하는 프로그램

(우리가 쓰고있는 code::blocks또한 컴파일러에 속하죠)

main()이 왜 꼭 필요한지 알아봅시다.
아래의 코드를 직접 작성하고 실행해 봅시다!
 

1

main(){}

실행결과
위 프로그램을 실행하면 오류 없이 실행되고 아무것도 출력되지 않습니다.


위 프로그램은 가장 간단한 C언어 프로그램으로, 오류 없이 컴파일되고 정상적으로 실행됩니다.

컴파일 – 쉽게 말하면 변환을 하는 것이죠 흔히 쓰는 언어(C/C++)들은 컴퓨터가 알아듣지 못하는 인간지향적으로 설계되어 있으며 이것을 컴퓨터가 알아들을 수 있도록 기계지향적 언어(기계어)로 변환하는 방법이 컴파일입니다.

 

C 언어 프로그램은 main() 함수 내부에 실행해야할 내용들을 작성하는 것이 기본이며 main() 함수에는 C프로그램의 시작부터 종료까지 실행되는 내용들이 작성되어있습니다.

함수 – 여러 명령의 집합을 말합니다. 함수 이름(){실행할 내용}의 구조로 되어있고 종류와 사용법이 다양합니다.

 

C언어 프로그램은 main() 함수를 기본으로 여러가지 명령과 함수들을 사용하여 작성됩니다. 프로그래밍의 기본은 사용자가 필요한 명령들을 코딩하는 것이고, 여러 명령들을 반복해서 사용할 경우 그것을 함수나 작은  단위의 부프로그램 형태로 코딩하는 것입니다.

부프로그램 – 하나의 프로그램을 구성하는 여러 작은 단위의 프로그램으로 일련의 명령문들을 모아두고, 이를 외부에서 호출할 수 있게한 구조입니다.

main()과 C 언어 프로그램의 구조

1

2

3

4

5

6

7

main()

{ <요놈

함수 1();

함수 2();

여러가지 문법;

:

} <요놈이 코드블록(블록)이라고 합니다.

C언어 내부의 모든 명령들은 위에서 아래로 작성하며, 각 문장의 끝에는 문장의 마지막을 나타내는 마침표(.)와 같은 의미로 세미콜론(;)이 사용됩니다.​

작은따옴표’ ‘, 큰따옴표” “, 소괄호 ( ), 중괄호{ }, 대괄호[ ]와 같이 쌍으로 사용되는 기호들이 있으며, 실행되는 문장이 2줄 이상일 경우 중괄호{ }를 사용하여 묶어주는데, 이를 코드블록(code block)이라고 합니다.

다음에는 main()함수와 같이 프로그램을 만드는데 필요한 헤더 파일에 대해 알아봅시다.





 

아래의 코드를 코드블록에 직접 작성하고 컴퓨터와의 대화를 시도해봅시다!



◉main() 함수의 구성
#include <stdio.h>
int main()
{
printf(“Hello World ! \n”);
}
함수의 정의 적절한 입력과 그에 따르는 출력이 존재하는 것
• C언어는 함수로 시작해서 함수로 끝남
• C언어로 작성한 모든 프로그램은 반드시 main() 이라는
주함수가 있어야 함
• C프로그램은 main() 함수부터 실행됨

◉함수의 구조
출력형태 함수이름 입력형태
int main (void)
{
함수의 몸체
printf(“Hello world! \n”);
}
• 함수는 기능을 가져야 함 (기능은 { } 내에 표현)
• 함수 내에 존재하는 각 문장의 끝은 세미콜론이 있어야 함
 ; 이 있어야만 하나의 문장이 끝난 것으로 간주함
• printf 등은 표준함수라고 하며, 이들의 모임을
표준라이브러리라고 함






◉Header 파일과 return
#include <stdio.h>
int main(void)
{
printf(“Hello World ! \n”);
return 0;
}
• #include <stdio.h>
(예) standard I/O 함수호출에 필요한 정보 포함
printf 표준함수 이용하려면 반드시 포함시켜야 함
• return 은 함수의 종료와 값의 전달(반환)의 두가지 의미 가짐
- 일반적으로 정상적인 종료는 0, 비정상인 경우 0이 아닌 값


◉헤더파일 (Header File)
• 반드시 #으로 시작하여야 함
• 컴파일 시 전처리기가 C 의 소스코드를 컴파일 하기 전에
작업을 수행
 특정파일 삽입, 문자열 대치, 조건 컴파일 등 수행
(예)
#define PRODUCT(X, Y) ((X)*(Y))
#include <stdio.h>
#include <string.h>
















Hello, World 프로그램 분석하기
일단, 여러분이 지난번에 쓰셨던 코드는 다음과 같습니다. 사실, 지난번에는 이 코드가 뭔
내용인가 하면서 쓰셨겠죠. 다만 한 가지 눈치 챘을 법한 부분은 바로 큰 따옴표로 닫혀 있는
부분의 "Hello, World!" 가 프로그램에 출력된다는 점이죠. 만약 여러분들께서 이를 "I LOVE U"
라 던지 여러가지 문장으로 바꿔보아서 실행 해 보았었으면 매우 훌륭한 일을 하신 겁니다.
호기심은 좋은 덕목 중의 하나이죠.
#include <stdio.h>
int main()
{
printf("Hello, World! \n");
return 0;
}
일단 위 프로그램의 첫 줄 부터 봅시다.
#include <stdio.h>
영어를 잘 하시는 분은 include 의 뜻이 '포함하다' 라는 것임을 알 수 있습니다. 그렇다면 위
프로그램은 무엇을 포함하고자 하는 것일까요? 바로 옆의 'stdio.h' 라는 파일을 포함하고자 하는
것입니다. 그렇다면 우리는 왜, stdio.h 라는 파일을 이 프로그램에 포함 시켰을 까요? 그 사실은
아래에 계속됩니다.
그 다음 부분을 살펴 봅시다.
int main()
이번에는 조금 생소한 단어군요. main 은 그렇다 쳐도, int 는 또 무엇입니까? 언뜻 보기에
무엇의 약자 인 것 같은데 말이죠. 사실 이는 '정수' 를 뜻하는 integer 의 약자입니다. 또한 그
옆의 main 은 함수를 말하는 것이죠. 사실 이 문장의 뜻은 '정수 형을 반환하는 메인 함수' 라는
뜻인며, 대부분의 C 프로그램은 위 함수로 부터 시작됩니다. 자세한 사실은 나중에 알아봅시다.
{
그 다음 문장은 참으로 간단하군요. 중괄호 입니다. 여기서 중괄호는 main 함수의 시작을
알리게 되죠. 즉, 중괄호로 묶인 부분은 '여기는 main 함수 꺼야' 라는 것을 나타냅니다. 이 때,
중괄호로 열었다면 반드시 } 로 닫아주어야 합니다.

printf("Hello, World! \n");
이제, 위 프로그램에서 가장 핵심이라 볼 수 있는 부분인 'printf' 를 살펴 봅시다. printf 는
화면에 괄호안의 내용을 출력할 수 있게 해주는 함수 입니다. 위의 경우, 괄호 안에 있는 Hello,
World! 가 화면에 출력되었지요.
그런데, 도대체 위 함수가 어떻게 해서 화면에 글자를 출력하는 것일까요? 사실, 화면에 글자를
출력하는 것은 쉬운 일 일 것 같지만, 매우 복잡한 과정을 거치는 것입니다. 왜냐하면, 일단
운영체제에 자신이 화면에 글자를 뿌려야 한다는 메시지를 보내야 하고, 또 운영체제는 하드웨어
(모니터) 에 이를 뿌린다는(출력한다는) 것을 이야기 해 주어야 하기 때문이죠.
하지만 우리가 위 짧은 문장을 화면에 표현하기 위해 위 모든 내용을 작성해야 한다는 것은
상당히 불합리해 보입니다. 따라서 우리는 위 모든 내용을 포함하고 있는 파일을 필요로 하는데,
그 것이 바로 앞서 이야기한 stdio.h 입니다. stdio 는 STandard Input Output header 의
약자로, '표준 입출력 헤더' 입니다. 이 파일에는 입출력, 즉 화면에 출력하고, 키보드로 부터
입력을 받아들이는 것에 대한 내용을 가지고 있습니다. 물론, 이 파일 하나에 모든 내용이 다 구현
되어 있는 것은 아닙니다. 자세한 내용은 나중에 배우게 됩니다.
그런데, 한 가지 이상한 점이 있습니다. 큰 따옴표 안의 내용이 모두 출력되는데, 왜 마지막의
\n 은 출력되지 않은 것일까요? 그렇다면 한 번 여러분들 께서 \n 을 지워 보고 다시 프로그램을
실행해 보세요. 아마 다음과 같이 나올 것 입니다.

지난번 하고 차이점이 보이세요? 분명히 지난 번에는 'Press anykey to continue' 가 한 줄

누르세요' 가 나타날 것입니다)
아하, 알겠습니다. 바로 \n 은 키보드 상의 엔터, 즉 개행 문자 였던 것입니다. (참고로 \ 를
Escape character 라고 합니다)
참고적으로 알아야 할 사실은 우리나라 키보드의 경우 \ 로 나타나지만 외국 대부분의
키보드에는 \ 대신에 역슬래시(\) 를 사용합니다. 따라서, 보통 C 언어 서적을 보면 \n 이라
나타난 것이 있는데 이는 \n 과 똑같은 것입니다.
마지막으로 하고 싶은 말은 모든 문장은 끝나는 부분에 세미콜론(;)을 찍어 주어야 된다는
것입니다. 물론,함수의 선언 부분 (즉, int main() ) 뒤에나 헤더파일 선언 부분 (#include
<stdio.h>) 뒤에는 ; 을 꼭 붙일 필요는 없으나 위와 같이 printf(.....) 나, 아래 줄의 return 0
와 같은 문장들에게는 꼭 끝에 세미콜론을 붙일 필요가 있습니다. 만약 붙이지 않는다면 이전
강의에서 보았던 오류들이 나타나게 되죠.
return 0;
영어로 읽어 보면 대충 뜻을 짐작하셨겠지만, 0 을 반환(return)한다는 뜻 입니다. 0 을 왜
반환할까요? 그리고 그 것을 반환한다면 '누구' 한테 반환하는 것인가요? 쉽게 말해
운영체제에게로 반환합니다. (정확히 말하면 이 프로그램을 호출한 프로그램 - 예를 들면 프로그램
관리자(O/S) 등 ) 그런데 왜 하필이면 0 일까요? 1 이면 안되고 왜 2 이면 안되죠.
그렇다면 한 번 1 이나 다른 원하는 숫자를 반환하도록 해보세요. 결과는 똑같습니다. 그런데 왜
굳이 0 을 반환하는 것일까요?
사실은 0 을 반환한다는 것은 컴퓨터에게 '프로그램이 무사히 종료되었음' 을 알리는 것이죠.
반면에 1 을 반환한다면 컴퓨터에게 '프로그램이 무사히 종료되지 않았어요. 즉, 오류가
발생했어요.' 를 알리는 것입니다. (이는 국제 표준화기구인 ISO 에서 결정된 바 입니다.) 즉,
프로그래머들끼리 만든 일종의 약속인 셈입니다. 하지만 지금 이 정도 수준의 프로그램에서 꼭
리턴값을 지키지 않는 다고 해서 큰 문제는 없습니다.
}
마지막으로 이렇게 꼭 중괄호로 닫아주어야지, 그렇지 않을 경우 파일의 끝이 없다는 오류가
발생하게 됩니다. 와우! 이쯤 되면 위 프로그램을 빠삭하게 분석해 보았다고 할 수 있습니다.
728x90
반응형