개발환경은 visual studio community 2019입니다.
기본적으로 c언어를 작성하기 위한 기본적인 환경이 세팅되어 있다는 전제 하에 글을 작성합니다.
만약 세팅 되어 있지 않은 분이 있다면 따라서 코드를 작성하시는 데에는 어려움이 있을 수 있습니다., visual studio community 2019를 설치하시길 바랍니다.
< C언어를 시작하기 위한 첫번째 관문! Hello world를 출력해보자 >
물론 첫시간이기 때문에 함수가 무엇이고 변수가 무엇이고 깊이 설명할 수가 없다. 처음 C언어를 배울 땐, 각각의 구문이 무엇을 뜻하고 있는지 몸에 각인시켜 나가는 것이 중요하다.
그리고 앞으로 하나하나 포스팅을 추가하면서, 변수, 함수 등등.. 필요한 개념을 이해하고 돌아오면, 더 잘 이해될 수 있을 겁니다.
( '//' 표시는 보통 코드 옆에 어떤 코드인지 '주석'을 달아 코드를 설명할때 사용합니다. '//'의 오른쪽에 있는 글은 코드와 별개로 처리되어, 컴파일할 때 인식되지 않습니다)
< 지난 시간 >
#include <stdio.h> // c언어를 사용하기 위한 기본 라이브러리를 포함( 영어로 따지면 숙어(?)) 를 컴퓨터가 이해 할 수 있도록 '포함' 합니다
// stdio.h 헤더는 아래에서 사용할 printf를 포함하고 있습니다
int main() //컴퓨터가 주로 작동해야 하는 '메인 함수'
{
printf("hello word"); // 문자열 "hello world"를 콘솔창에 출력합니다
return 0; // 0을 남기고 함수의 동작을 종료합니다
}
지난 시간에 위와 같이 'Hello world'를 읽어보았다.
위의 글을 visual studio의 코드 창에 작성한다면, 다음과 같이 콘솔 창에 출력될 것입니다.

< 코드의 동작원리를 알아봅시다 >
이제는 도대체 어떤 원리로 컴퓨터 코드를 이해하고 동작했는지 한번 살펴보도록 합니다.
먼저 컴퓨터는 '순차처리'라는 동작원리를 가지고 있다는 것을 이해해야합니다.
즉, 맨 윗줄부터 한 줄 한줄 순서대로 처리한다는 의미입니다.
위 사진을 보면 왼쪽에 세로로 숫자가 1,2,3,4.... 순서대로 적혀 있는 것을 볼 수 있습니다.
즉, 저 숫자의 순서대로 컴퓨터는 주어진 코드를 번역해서 실행합니다.
이러한 컴퓨터의 처리 순서에 맞춰서 우리도 첫 번째 줄부터 하나하나 읽어보도록 하겠습니다..
#include란 무엇일까??
'전처리기' 또는 '전처리 구문'이라고 불리지만, 일단 어색한 이름은 미뤄두고 어떤 행동을 하는지를 이해해보자
include는 영어로 '~을 포함하다'라는 뜻입니다.
c 언어에서도 직관적으로 같은 뜻으로 사용된다고 볼 수 있습니다.
컴퓨터는 기본적으로 0과 1로 된 숫자를 통해 계산을 하는 계산기입니다.
그런 컴퓨터에게 우리가 평소 사용하는 말을 하면, 컴퓨터는 도저히 이해할 수가 없습니다.
즉, include 아래쪽에 printf라는 글은 컴퓨터가 기본적으로 이해할 수 없다는 뜻입니다.
이러한 언어를 01001과 같은 말로 '컴파일러'가 번역할 수 있도록 미리 알려주어야 하는데, 이때 간편하게 사용하기 위해 '함수'로 만든 것입니다.
여기서 아마 비전공자 분들은, '컴파일러는 뭐지?' '함수는 뭐지?'라고 생각이 들 것입니다.
쉽게 말해, 컴파일러는 '번역기( 사람이 쓴 말을 컴퓨터가 이해할 수 있도록 해주는 )'
함수화는 '간편하게 묶는다'정도로 일단 이해를 해 주시면 좋을 것 같습니다.
자세한 공학적 원리는 추후에 말하기로 하고, 지금은 의미를 이해하는 것이 먼저이기 때문입니다.
위의 글을 적용해서 다시 코드를 읽어보면, '~를 출력하라'라고 말하기 위해 우리는 'printf라는 함수'를 적었습니다.
그러면 '컴파일러'가 printf라는 코드를 보고 컴퓨터가 이해할 수 있도록 번역해서 전달하는 역할을 해주고 있는 것입니다.
하지만 printf는 그냥은 사용할 수 없습니다.
미리 컴파일러에게 사용할 함수들을 미리 선언해서 알려주어야 하는데, 이렇게 '함수화'된 단어들을 가지고 있는 라이브러리가 바로 < > 안에 들어가 있는 'stdio.h' 헤더 파일인 것입니다.
#include는 바로 이 stdio.h를 포함 함으로써, 컴파일러가 printf가 무슨 뜻인지 번역할 수 있게 됩니다.
만약 #include를 통해 stdio.h가 포함되어 있지 않다면, 컴파일러는 printf를 번역할 수 없다
자, 이제 길다면 긴 #include에 대한 설명이 끝났다.

int main()은 무엇을 의미할까??
int main()는 바로 함수를 만드는 문법입니다 // int(변수 이름) main (함수 이름) () (매개변수 없음)
프로그래밍에서 함수라는 단어는 지금 단계에서 이해하기에는 너무 많은 내용을 필요로 하니, 여기서도
'컴퓨터를 동작시킬 내용을 코드로 적어서 묶어놓고 main이라는 이름을 붙였다. '정도로 이해하시면 좋을 것 같습니다.
{ } (중괄호)는 '브라켓'이라고 부르는 분들도 있는데 함수의 정의(즉, 내용)를 말합니다.
{ } (중괄호) 안에 있는 것을 보면 main이라는 함수가 어떤 동작을 묶어놓은 것인지 알 수 있습니다.
main으로 이름을 정했기 때문에, 보통 프로그래밍해서 main함수에는 주로 중요하게 동작할 코드의 내용을 작성하게 됩니다.
여기서는 콘솔 창에 "hellow world"를 출력하는 것이 주목적이기 때문에 printf 구문이 main함수 안에 있는 것입니다.
{ } 안에 실제로 동작하는 것은 사실 printf밖에 없다고 볼 수 있습니다.
printf는 무엇을 의미할까?
printf는 자주 보았지만, 검은색 콘솔 창에 문자열 ( 쉽게 말해 '글')을 출력하는 함수입니다.
이때 ';'라는 글자가 보일 것이다. 이것은 기본적으로 코딩 언어에서 '명령을 종료한다'는 의미로 사용됩니다.
return은 무엇을 의미할까?
return은 함수가 종료되고, 남기는 것을 의미합니다. 통상적으로는 0일 경우 함수가 종료됨을 의미합니다.
이상으로 hello world를 c언어로 콘솔창에 출력하는 코드를 작성하고 원리를 이해해 보았습니다.
보통의 강의에서는 이 hello world 출력하는 것을 굉장히 간단하게 설명하고 넘어가는 경우가 많습니다.
근데, 이때 대충 이해하고 넘어가면, 나중에 동작원리에 대해 설명을 들어도, 그때 배운 동작원리가 바로 이 hello world라는 간단한 구문을 작성하는데에도 동일하게 적용된다는 것을 놓치기 쉽습니다.
때문에, 시작하는 입장에서는 조금 부담스러울 수도 있고, 어렵다고 느껴질 수도 있지만, 튼튼하게 기본기를 쌓기 위해 조금 길게 설명하게 되었음을 이해해주시면 감사하겠습니다.
글이 도움이되었다면 '댓글', 또는 '공감'을 눌러주시면 감사하겠습니다.