이번 포스팅부터는 실제로 코드작성을 할 때 사용하는 여러 문법에 대해서 공부할 예정입니다.

만약 프로그래밍 언어에 대해 아무 지식도 없다면 하나하나 꼼꼼히 따져가면서 이해하면 나중에 C++. JAVA 등 다른 언어를 배울 때 쉽게쉽게 넘어가실 수 있을 것입니다.

이 말은 이미 타 프로그래밍 언어(특히 C++)를 아신다면 C는 쉽게 넘어가실 수도 있다는 이야기가 되겠죠?

그렇다면 바로 시작하겠습니다!

 

목차


    0. Hello World!

    네, 모든 프로그래밍 언어들의 국룰(..)이죠?

    Hello World!를 화면에 띄우는 것부터 수업은 시작됩니다.

    VS에서 프로젝트를 하나 만들고, 그 안에 소스파일을 하나 만들어서 위 내용을 작성하고 실행하면 Hello World가 뜨게 됩니다.

     

    실제로 작성해 보았습니다. 잘 뜨죠?

    위 코드에 대한 간략한 설명은 위의 그림에 자세하게 나와 있습니다.

    하지만 처음이라면 주석문이 뭐고, 입출력 라이브러리는 뭐고, 저게 도대체 무슨 문법으로 저렇게 구성된 것인지 모를 수 있습니다.

    지금은 너무 깊게 이해하지 않아도 됩니다. 저런 형식임을 이해하시면 됩니다. 이번 포스팅이 끝날 때 쯤엔 모두 이해하실 수 있을 것이라고 확신합니다!

     

    먼저 맨 첫 줄을 확인하기 전에 헤더 파일과 소스파일의 구성에 대해 간략하게 알아보고 넘어가도록 하겠습니다.

    헤더 파일은 (.h) 형식을 띄고, 소스 파일은 (.c) 형식을 띕니다.

    헤더 파일(.h)에서는 매크로와 구조체와 type를 정의하고, 함수와 전역변수의 extern을 선언합니다. 간단하게 선언부라고 생각하면 됩니다. 더 쉽게 말해서 껍데기에요.

    소스 파일(.c)에서는 함수를 정의하고 전역변수를 선언합니다. 전역변수의 extern은 다른 소스 파일에 선언된 전역변수를 사용할 때 쓰고, 일반 전역변수는 현재 소스 파일에 전역변수를 사용할 때 씁니다.

     

    무슨 말인지 모르셔도 괜찮습니다. 나중에 이런 내용을 어렴풋이 다뤘었지?? 라고 생각하면서 다시 찾아오실 것입니다 ㅋㅋㅋㅋㅋㅋ

    헤더 파일과 소스 파일의 구성


    1. 주석

    주석해당 프로그램에 대한 설명이 필요할 때 사용합니다. 다른 말로 설명문이라고도 합니다.

    위 코드의 예에서 맨 첫줄에 위치한 /* Ex02_01.c */ 부분이 주석이 되겠네요!

    주석의 시작에는 /*가, 주석의 끝에는 */가 필요합니다.

     

    프로그램의 수행에는 영향을 미치지 않기 때문에 /* */ 안에는 어떤 내용이 들어가더라도 작동에는 문제가 없습니다.

    특정 부분 뿐만이 아니라 프로그램 전체에 대한 간략한 정보를 제공하기 위한 목적으로도 사용됩니다.

     

     

    한 줄로 된 문장의 일부분을 주석으로 만들 수도 있고, 여러 줄에 걸쳐서 주석을 작성할 수도 있습니다.

     

     

    //를 이용하여 한 줄 주석을 사용할 수도 있습니다.

    원래는 //는 C++에서 사용하는 주석의 형태이지만, 컴파일러들이 발전한 현 시대에는 대부분의 C/C++ 컴파일러에서 지원하는 주석 형태입니다.

    //를 사용하면 해당 줄 끝까지를 주석으로 간주합니다!

     

     

    /* */와 //의 또 다른 차이는, /*는 주석 중첩사용이 불가능하지만, //는 중첩해서 사용할 수 있습니다.

    /* */ 안에 다른 /* */이 들어가게 되면 주석의 시작과 끝이 모호해지기 때문입니다.

    (/* /* */ */이 들어가면 */이 처음으로 등장하는 순간 주석이 풀려서 */ 부분이 붕 떠버립니다!)

    따라서 사용할 때에 잘 확인하면서 사용하셔야 합니다!

     


    2. 함수

    프로그래밍 언어에서 가장 기초가 되는 함수입니다!

    함수프로그램에서 처리할 내용을 모아두는 기본 단위입니다.

    C 프로그램은 하나 이상의 함수로 구성됩니다. (main이 있어야 프로그램이 실행될 수 있으니까!)

     

     

    함수를 만들 때에는 함수의 리턴형, 함수 이름, 매개변수가 필요합니다.

    리턴형은 이 함수가 돌아가고 나면 남는 결과값이고, 함수명은 말 그대로 함수의 이름, 매개변수는 함수의 동작에 필요한 요소를 받는 과정입니다.

     

    그 아래에는 { }가 등장하는데, 이 안에 함수가 처리할 내용이 들어갑니다.

    그리고 이 함수는 문장들로 구성됩니다.

     

    문장함수를 구성하는 기본 단위로, C 프로그램의 각 문장은 세미콜론(;)으로 끝납니다.

     

    C언어를 사용한다면 여러분들이 백날 엔터쳐봐야 컴퓨터는 문장의 끝으로 인식하지 않습니다!!

     

    반드시 문장의 끝에는 ;이 들어가야 종료됩니다. 이 부분은 매우 중요하니 꼭 기억하셔야 합니다.

     

     

    함수가 호출되면 함수 안에 있는 문장들이 순차적으로 수행되고, 함수의 끝( } )을 만나거나 return을 만나면 함수를 호출한 곳으로 되돌아갑니다.

    return 다음에 들어갈 값은 본 함수가 끝나고 나서 남는 결과값이 됩니다. 그 값은 return 옆에 작성해 주시면 됩니다.

     

     

    우리가 맨 처음에 봤던 코드에서는 main이라는 함수가 있었습니다.

    이 main 함수는 조금 특이한 함수로, 프로그램이 처음 시작될 때 호출되는 진입점 함수입니다. (반드시 소문자여야 합니다!!)

    C 프로그램에서는 이 main함수를 시작으로 프로그램이 작동하기 때문에 main이 없으면 정상적으로 작동하지 않습니다.

    즉 main 함수가 없거나, 여러 개의 main 함수를 가진 프로그램은 잘못된 프로그램이 됩니다.

    (보통은 컴파일러가 main함수가 없다고 에러를 호출합니다)

     

    잘못된 예시들!!

    main 함수는 void형을 리턴하거나 int형을 리턴합니다.

     

    void main(void)

    int main(void)

     

    딱히 중요한 부분은 아니긴 한데, void형을 리턴값으로 받으면 끝에 return이 없고, int형을 리턴값으로 받으면 { }의 맨 마지막에 return 0을 넣어주는 것이 일반적입니다. 필요에 따라 0이 아닌 다른 값을 넣을 수도 있습니다.

    main함수의 리턴값은 프로그램의 종료 코드로, 프로그램이 종료될 때 운영체제에게 return으로 설정한 값을 넘겨주게 됩니다.

     

     

    위 문장들을 보면 들여쓰기(indentation)이 되어있는 것을 보실 수 있습니다.

    Python처럼 들여쓰기를 문장의 구분으로 사용하는 언어인 경우 들여쓰기는 필수이지만, C언어는 ;를 문장의 구분으로 사용하기 때문에 들여쓰기는 필수가 아닙니다.

    하지만 들여쓰기는 우리가 실제로 보고 수정하고 관리하는 데에 있어서 도움을 줍니다.

     

    모든 문장이 한 줄로 작성되어 있는 것보다는 당연히 블록별로 적절하게 띄어쓰기와 엔터가 되어 있는 것이 읽기 좋겠죠? 그렇기 때문에 되도록이면 같은 블록에 속한 문장들은 블록끼리 같은 만큼 들여쓰기를 하는 것이 좋습니다.

     

     

    마지막으로 #include <stdio.h>가 남았습니다.

    이 부분은 출력을 하기 위한 printf 함수를 사용하기 위해 외부에서 라이브러리를 가져오는 것을 의미하는 부분입니다.

    입출력 라이브러리를 사용하기 위해서 먼저 입출력 라이브러리에 대한 헤더 파일을 포함하는 것이죠.

    #include <라이브러리명> 이라는 전처리문을 통해 필요한 라이브러리를 가져올 수 있습니다. 

     

     

    그리고 stdio.h 안에 있는 printf() 함수는 문자열을 출력하기 위해 이미 만들어져있는 함수입니다.

    출력할 내용을 " "으로 묶어서 printf 함수의 () 안에 써줍니다.

    만약 문자열을 출력한 다음에 커서를 다음 줄로 이동하기 위해서는 줄바꿈 문자인 '\n'을 함께 출력해줍니다. \ 혹은 역슬래시를 사용하시면 됩니다.

     


    3. 추가적인 내용들!

    소스 파일을 모두 작성하고 실행을 하면 콘솔 창이 뜹니다.

    콘솔 프로그램콘솔 창에서 실행되는 프로그램으로 텍스트 기반의 입출력을 처리하여 우리에게 띄워줍니다.

    실행에서 cmd를 실행하면 검은 화면에 흰색 글씨가 뜨죠? 바로 이게 콘솔 창의 일종입니다.

    단, 한 번에 하나의 프로그램만 실행됩니다. 2번 실행한다고 콘솔 창이 2개가 뜨지는 않습니다!

     

    반대로 윈도우 프로그램윈도우에서 입출력을 처리하는 프로그램으로 그래픽 출력이 가능합니다. 대신 콘솔 창보다는 복잡하게 구성되어 있어서 Win32 API 라이브러리나 MFC 라이브러리가 추가로 필요합니다.

     

    우리가 앞으로 VS를 사용하면서 자주 보게 될 창은 콘솔 창입니다. 자주 쓰다보면 익숙해져요 ㅎㅎ

     

     

    그리고 마지막으로 라이브러리에 대해서 알아보겠습니다.

    위에서 라이브러리를 불러온다고 했는데, 라이브러리의 뜻이 도서관이죠?

    도서관처럼 다양한 책(함수)들이 들어있는 것이라고 생각하시면 되겠습니다.

    자주 사용되는 기능을 미리 준비해둔 것으로, 컴파일된 오브젝트 코드를 묶어놓은 .lib 확장자를 가진 바이너리 파일입니다.

    다시 복습하면, 우리가 작성한 코드를 기계가 알아들을 수 있게 obj로 만드는 과정이 컴파일입니다. 기억하시죠?! :)

     

     


    오늘은 코드를 이해하는 데에 있어서 가장 필수적인 내용인 주석과 함수에 대해서 알아봤습니다.

    오늘 배운 내용을 모두 이해하신다면, 다음부터는 보다 수월하게 진행하실 수 있을 것입니다. 시작이 반이잖아요!!

     

    그렇다면 다음 포스팅에서 뵙도록 하겠습니다! :)

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기