main 함수 실행하기

이번 강의에서는, main 함수 안에 메세지를 출력하는 코드를 작성해 볼거예요.
C/C++ 소스파일이 컴파일 후 어떻게 실행되고 결과를 출력하는지도 확인해 볼까요?



강의들은 모두 무료입니다. 단, 저작권은 키클 코딩랩 에 있으며, 무단 복제 및 배포를 엄금합니다.
이를 어길 시, 본 사이트의 서버가 미국에 있으므로, 미국법에 의해 처벌될 수도 있습니다.




라이브러리(Library)와 헤더파일(Header File)

원하는 폴더/디렉토리를 만들고 gedit 문서 편집기를 이용하여 "lec5_main.c"라는 이름의 C 파일만 만들어 볼게요. 이번에는, 확장자 "cpp"를 갖는 "lec5_main.cpp"라는 C++ 파일은 생각도 하지 않기로 해요.
그리고, 강의 main 함수 해부하기 - 함수란?에서 코딩한 main 함수의 내용을 복사해서, 아래처럼 새로 만든 파일에 붙여넣어 보세요. 이 코드에 새로운 코드들을 추가해 나갈 것이랍니다.

lec5_main.c
int main(int argc, char *argv[ ]) {
	int myvar = 3;
	char mychar = 'a';
	char mychar2 = 76;
	
	myvar += argc;
}

이번 강의에서는, 위 파일을 컴파일하고 실행할 때, 메세지를 터미널에 출력해 보려고 해요.
그러기 위해서 공부해야할 것이 몇가지 있는데요, 라이브러리(Library)와 헤더파일(Header File)이랍니다.

라이브러리(Library)란, 어떤 기능을 하는 코드들을 묶어 놓은 것을 의미해요. 예를 들어, "덧셈", "뺄셈", "곱하기", "나누기" 등의 기능을 하는 함수들을 작성하고, 그 코드들을 "사칙연산"이라는 이름으로 묶으면, "사칙연산" 라이브러리가 되는 것이지요. 나중에 우리도 직접 우리만의 라이브러리를 만들어 볼거랍니다.
라이브러리는 내장하고 있는 코드들의 구조나 기본적인 사항들을 알려주는 헤더파일(Header File)을 가지고 있어요. 위에서 언급한 "사칙연산"이라는 라이브러리를 예로 들면, 헤더파일은 "덧셈", "뺄셈", "곱하기", "나누기" 함수들이 어떤 데이터타입의 전달인자를 이용하여 정보를 받고 어떤 데이터타입의 값을 리턴하는지 등을 보여주고 있는 것이지요. 고로, 헤더파일을 보면, 라이브러리에 있는 코드(함수 등)을 어떻게 사용해야 하는지 알 수 있답니다. 한 가지 기억할 점은 헤더파일의 확장자는 "h"라는 것이예요. 그래서 헤더파일의 이름을 보면 "my_header.h"와 같은 형태랍니다.





#include 전처리기 (Pre-processor)

어떤 라이브러리에 있는 함수들을 사용하고 싶다면, "~~~.c"나 "~~~.cpp"와 같은 소스파일(Source File)에 해당 라이브러리의 헤더파일을 포함시켜서 "이런 라이브러리를 사용할 것이다"라고 명시적으로 코딩을 해주어야 해요. 그러면, 소스파일을 컴파일할 때, 컴파일러가 제일 먼저 전처리기(Pre-processor)라는 것으로 하여금 헤더파일의 내용을 소스파일에 복사하게 한답니다. 전처리기의 작업이 모두 끝나면, 컴파일러는 본격적으로 소스파일을 컴파일하게 되는 것이지요.

[문법] 전처리기 (Pre-processor)

소스파일(Source File)에 어떤 라이브러리의 헤더파일을 포함시켜서 "이런 라이브러리를 사용할 것이다"라고 명시적으로 코딩을 해줄때 사용하는 전처리기의 코드가 #include랍니다.

[문법] #include





printf 함수 사용하기

이번 강의에서는, 소스파일을 컴파일하고 실행하여 어떤 메세지를 터미널에 출력해 보기로 했었죠?
터미널에 출력하기 위해서, C가 제공하는 표준 입출력 라이브러리에 있는 printf 함수를 사용할 것이랍니다. 아래 줄1과 줄10처럼 표준 입출력 라이브러리의 헤더파일인 stdio.h를 포함시키고 printf를 사용하는 코드들을 추가해 볼게요.

lec5_main.c
#include <stdio.h>

int main (int argc, char *argv[ ]) {
	int myvar = 3;
	char mychar = 'a';
	char mychar2 = 76;

	myvar += argc;

	printf("My first print\n");
}

줄1에서는, 전처리기의 #include를 이용하여 stdio.h 헤더파일을 포함시키고 있지요. 이 코드로 인해, 컴파일 직전, 전처리기는 stdio.h 파일의 내용을 줄1의 위치에 삽입하게 된답니다.
줄10에서는, printf 함수를 사용하여 메세지를 출력하는 코딩을 하고 있어요. 줄4~줄8에 있는 코드들과 마찬가지로 main 함수의 "{ }"안에 코딩을 했지요? C/C++에서 소스 파일을 컴파일하고 실행하면, 무조건 main 함수가 호출되고, main 함수의 "{ }"안에 있는 코드들이 모두 처리되면 우리가 만든 프로그램의 실행은 끝이 난답니다. 그래서, 지금까지 해왔던 것처럼, 메세지를 터미널에 출력하고자 하는 printf 함수 또한 반드시 "{ }"안에 코딩이 되어야 하는 것이죠.
그럼, printf 함수에 대해서 조금 알아볼까요?

[문법] printf()

printf 함수를 어떻게 사용해야 하는지 알겠지요?
그런데, 위 줄10에서 궁금한 것이 하나 있을거예요. 문자열의 마지막에 있는 \n라는 문자는 무엇인지.. 이것은 출력할 때, "줄 바꿈"을 의미하는 엄연한 char 타입의 문자이고 ASCII code값이 10이랍니다.





컴파일 후 실행하기

이제, 강의 첫 대면..main 함수에서 했던 것처럼, 파일을 저장하고 gedit 편집기 닫기를 하세요.
그리고, 아래 줄1처럼 터미널에서 "gcc lec5_main.c"을 실행하여 컴파일하세요.

.../my_folder$ gcc lec5_main.c
.../my_folder$ ls
a.out  lec5_main.c
.../my_folder$

컴파일이 잘 되었다면, 줄2에서처럼 터미널 명령어 ls를 실행해 보세요. 줄3에서처럼, 컴파일 후 a.out이라는 파일이 생성된 것을 볼 수 있어요. 바로 이 a.out 파일이 우리가 작성한 소스파일이 컴파일되어 만들어진 실행파일이랍니다.
터미널 명령어 ls에 대하여 잠깐 알아보고 갈게요.

[터미널 명령어]

이제, 우리의 첫 프로그램을 실행해 보지요.
아래 줄3에서와 같이 "./a.out"을 실행하면, 우리의 첫 프로그램이 실행이 된답니다. "./a.out"는 a.out 파일의 경로 정보를 담고 있다는 것 주목해 주세요. 즉, "./"에서 "."는 현재 폴더/디렉토리 (아래 예에서는 my_folder)를 의미하고, "/"는 "~안의"라는 의미를 갖지요. 고로, "./a.out"는 "현재 폴더안에 있는 a.out파일"이라는 의미인 것이지요.

.../my_folder$ ls
a.out  lec5_main.c
.../my_folder$ ./a.out
My first print
.../my_folder$

줄3에서 실행파일을 실행하면, 줄4에서와 같이 우리가 코딩한대로 출력이 되는것을 볼 수 있답니다.

강의에서 작성된 소스 코드 (source code)를 다운받으려면, 다음 링크를 클릭하세요: lec5_main.c

혹시, 이해가 잘 안되는 부분에 대한 질문이 있거나 다루어 줬으면 하는 주제가 있으면, 화면 오른쪽 하단에 "질문하기" 버튼을 이용해 주세요.






발자취

2019-09-11 "키클 코딩랩 - 미국 공학박사 아빠의 코딩 연구소"로 이름 변경
2019-06-28 코딩 교실 공개
2019-03-18 코딩 교실 제작 시작

바로가기
Python 배움터
C/C++ 배움터
About
Contact
Privacy Policy
강의목록
질문하기
처음으로