본문 바로가기
C 프로그래밍

독학으로 배우는 C언어 003 C언어 구조와 컴파일 오류

by 솔토지빈 2024. 5. 31.
반응형

독학으로 배우는 C언어 003 C언어 구조와 컴파일 오류

Contents

    1. C언어의 기본 구조의 이해

     #include<stdio.h>
      int main(void)
      {                         
       printf("안녕하세요.");
      }

     

    행설명

    1: #include는 선행처리기로 프로그램이 실행되면 <stdio.h>를 먼저 처리해 준다.

    <stdio.h>는 라이브러리의 일종이다. 헤더 파일이라고도 하는데 내부에는 많은 함수가 정의 되어 있다.

    출력 처리를 한 printf()는 함수이다. 함수가 지금 무엇인지에 대해서 이해하지 말자 그냥 어떤 일을 처리하는 작은 프로그램이라고 생각하자. <stdio.h>내부에는 printf() 함수가 동작할 수 있는 프로그램이 정의 되어 있다고만 이해하자.

     

    2: C언어는 함수로 구성된 언어이다. 최상의 함수가 main() 함수이다.

    하나의 프로젝트에서는 하나의 main() 함수만을 사용해야 한다.

    intvoid는 나중에 다시 설명하겠다.

     

    3: 5: 는 시작과 끝을 의미하는 기호이다. 주로 함수의 시작과 끝을 알릴 때 사용하며 특정 명령에서도 시작과 끝 기호로 사용한다.

     

    4: printf() 함수는 인수를 출력해 준다. “안녕하세요가 인수이다.

     

    { }는 글쓰기에서 하나의 문단이고 ;(세미콜론)은 하나의 문장 끝을 알리는 마침표라고 생각하자. 글쓰기에서 문단을 들여쓰기하고 문장에 마침표를 사용하듯이 사용해야 한다. 글을 쓸 때는 마침표를 사용하지 않더라도 문제가 없지만 c언어로 코딩할 때는 각각의 문장의 끝에는 ;을 사용하지 않으면 컴퓨터가 이해하지 못해 오류 처리한다.

     

    위의 설명을 전혀 이해 못 해도 상관없다. 지금은 이해 못 해도 시간이 해결해 줄 것이니 실망하지 않았으면 한다.

     

    2. fatal error LNK1169 오류

    앞으로 다양한 예제로 실습할 것이다. 그런데 어떤 방법으로 소스 파일을 생성하고 컴파일 할지에 대한 지침을 만들기 위해 꼭 이해해야 할 부분이 있다.

     

    fatal error LNK1169 에러의 해결 방법이다.

     

    실습 1: fatal error LNK1169 오류

    ex002.c 파일을 다음 프로그램을 입력하고 실행해 보자.

    /* ex002 */
    /* 소개 */
     #include<stdio.h>
      int main(void)
     {                         
       printf("안녕하세요.");
         printf("저는 C린이 홍길동입니다.");   //홍길동을 자신의 이름으로 변경한다.
        printf("앞으로 열공하여 C프로그래머가 되겠습니다.");  
       return 0;
      }

     

    (1) 새로운 소스 파일을 만들기 위해서 화면 왼쪽이 솔루션 탐색기에서

    소스 파일을 마우스 오른쪽 단추를 눌러

    추가에 마우스 포인터를 올려놓고 서브 메뉴가 보이면

    새 항목을 선택한다.

     

    (2) 새 항목 추가 대화상자에서 파일이름으로

    ‘ex002.c’을 입력한다. 확장자가 cpp로 되어있는데 cppc로 변경한다.

    [추가] 버튼을 클릭한다.

     

    (3) 코드창에 다음과 같이 입력한다.

     

    (4) 입력이 끝났으면 저장한다. 저장된 상태는 행 번호 오른쪽에 녹색 수직선으로 확인할 수 있다. 특정 행을 수정하였을 때 해당 행이 저장에 반영되지 않았다는 표시로 노란색 수직선이 표시된다.

     

    (5) ‘단추 또는 Ctrl + F5키를 눌러 프로그램을 실행한다.

    실행 결과 화면이 보이지 않고 다음과 같이 빌드 오류창이 표시된다.

     

    (6) 일단 빌드 오류창을 [아니오] 버튼을 눌러 닫는다.

     

    (7) 코드 창 아래에 출력창 내용을 보면 ‘fatal error LNK1169: 여러 번 정의된 기호가 있습니다.’라는 내용이 있다.

    (8) 출력창을 닫고 오류목 록창에서 확인하면 다음과 같은 내용을 확인할 수 있다.

     

    3. fatal error LNK1169 오류의 해결 방법

    fatal error LNK1169가 발생하는 원인은 프로젝트에 있다. 하나의 프로젝트 안에는 여러 개의 소스 파일이 존재한다. 아무리 소스 파일이 많더라도 main() 함수는 한 번만 사용 가능하다. 하나의 나라에 왕이 한 명만 있어야 하는 것과 같다.

    소스 파일 ex001.cex002.c 두 개의 소스 파일이 exercise 프로젝트 안에 존재한다. 실제 응용프로그램을 개발할 때는 프로젝트 소스 중에 메인 소스에 main() 함수를 한 번만 사용하는 것이 원칙이다.

    초보자가 메인 프로그램을 원칙대로 작성하기 위해서는 main()를 사용하는 것이 교육 목적상 필요하다.

    그렇다면 어떻게 하면 이 문제를 해결할 수 있을까?

     

    해결 하는 방법은 다음과 같다.

    (1) 소스 파일을 만들기 위해 프로젝트도 매번 만든다.

    가능하다. 하지만 좀 불편할 거 같다.

    (2) 프로젝트에서 제거한다.

    파일을 삭제하는 것이 아니고 프로젝트에 포함만 하지 않는 것이다. 이때 소스 파일 목록에 표시되지 않는다. 이 방법도 괜찮은 거 같은데 소스 파일에서 연습으로 사용한 소스 파일이 보이지 않는다는 단점이 있다.

    (3) 빌드에서 제외한다.

    이 방법은 소스 파일이 목록에는 보이는데 컴파일할 때 포함하지 않겠다는 것이다.

    이 경우는 연습용 소스 파일이 많아지면 불편할 수 있다.

     

    (1)은 효율성이 떨어지는 것 같고 (2) 번과 (3) 번을 사용자가 적절하게 사용하면 좋을 것 같다.

     

    1) 프로젝트에서 제거하고 컴파일하기

    소스 파일 ex001.c ex002.c 중에서 결과를 확인해야 할 소스 파일이 ex002.c 이다.

    그렇다면 프로젝트에서 제외시킬 파일은 ex001.c이다.

     

    (1) 솔루션 탐색기에서

    ex001.c 파일을 위에서 마우스 오른쪽 단추를 눌러 바로가기 메뉴가 표시되면

    메뉴에서 프로젝트에서 제외를 선택한다.

     

    (2) 단추 또는 Ctrl + F5키를 눌러 프로그램을 실행한다.

    콘솔창에 다음과 같이 출력되었다면 올바르게 컴파일된 것이다.

     

    이번에는 제외된 ex001.c파일을 다시 불러와 보자

    (1) 솔루션 탐색기의

    소스 파일 위에서 마우스 오른쪽 단추를 눌러 바로가기 메뉴에서

    추가에 마우스를 올려놓으면

    하위 메뉴가 보이는데 항목 중에서 기존 항목메뉴를 선택한다.

     

    (2) 추가 목록 대화상자에서 ex001.c을 선택하고 [추가] 버튼을 누르면 다시 소스 파일에 추가할 수 있다.

     

    2) 빌드에서 제외하고 컴파일하기

    빌드에서 제외하는 것은 소스 파일 목록에 보이기는 하지만 컴파일에서 제외하는 것이다.

    친구 사이에서 있어서는 안 되는 따돌리는 것이라고 하면 이해가 쉬울 것 같다.

     

    (1) 솔루션 탐색기에서 빌드에서 제외할

    ex001.c 파일 위에 마우스를 올려놓고

    마우스 오른쪽 단추를 눌러 속성항목을 선택한다.

     

    (2) 속성 창이 나오면 다음과 같이 차례대로 진행하면 된다.

     

    (3) 빌드에서 제외된 소스 파일은 솔루션 탐색기에 다음과 같이 빨간색 표식이 붙는다.

     

    만약 다시 빌드에 포함하려면 빌드에서 제외항목에서 아니오를 선택하면 된다.

     

    (4) ‘단추 또는 Ctrl + F5키를 눌러 프로그램을 실행한다.

     

    정상적으로 컴파일된 결과를 볼 수 있다.

     

    지금까지 따라하면서 잘 이해했다면 세 가지 부분에 대해서 궁금증을 가졌을 것이다.

    첫 번째는 소스 코드의 마지막 줄에 코딩된

    return 0;

    이 문장이다.

     

    첫 번째 예제프로그램인 ex001.c 에서는 사용하지 않았는데 이번 예제에는 사용했는데 무엇이 다른가?

     

    일단은 사용하든 하지 않든 결과는 같다. 그럼 안써도 되는 것가?

     

    물론 사용하지 않아도 된다.

    뒤에서 다시 거론하겠지만 함수는 대부분 반환 값을 가지게 된다.

    반환할 값이 있다면 0 이 아닌 다른 값을 반환하는데

    return 0;은 반환 값이 없을 때 사용한다. 그리고 함수의 마지막임을 알리는 용도로 사용된다.

     

    두 번째는 코드에서 printf() 함수를 세 번 사용했는데 줄 바꿈 없이 한 줄에 출력했다.

    그렇다면 줄을 바꾸어 출력하는 방법은 있는가?

    물론 있다.

    바로 다음 번 실습에서 사용할 것이지 조금만 기다리자.

     

    세 번째는 /* *///의 사용이다. 이것은 주석문인데 바로 설명하도록 하겠다.

     

    4. 주석문의 사용

    주석문은 프로그램 실행에 영향을 미치지 않는 메모이다.

    시간이 지나면서 상당히 복잡하고 긴 소스에 대한 이해가 부족해질 수 있다. 왜 이 코드를 사용했는지에 대한 설명이나. 파일이름, 작성자 이름과 같이 의미 파악을 쉽게 하려고 사용한다.

    사용 방법은 두 가지가 있다.

     

    첫번째는 /* 내용 */ 이다. 한 줄 전체 또는 여러 줄에 걸쳐 주석을 사용하고자 할 때 사용할 수 있다.

     

    사용 예 1)

    /* ex002 */

     

    사용예 2)

    /* 작성자 : 홍길동
    작성일자 : 203022*/

     

    두 번째는 //의 사용이다.

    //는 소스 코드가 입력된 위치에서부터 //가 입력된 행의 끝까지가 주석 처리된다.

     

    사용 예 1)

    // 지금부터는 반복문 처리

     

    사용 예 2)

    printf("안녕하세요."); // ‘안녕하세요를 출력한다.

     

     

    5. 들여쓰기의 유용성

    C언어에서 들여쓰기는 글쓰기의 들여쓰기와는 의미가 다르다. 코드의 구조를 쉽게 파악하여 알고리즘을 명확하게 하기 위해서 사용한다.

    지금은 특별히 복잡한 구조의 코딩을 하지 않아서 들여쓰기에 대한 이해가 필요하지 않을 수도 있다. 앞으로 복잡한 코딩을 해야 하므로 처음부터 들여쓰기 습관을 가져야 한다.

    들여쓰기를 한다는 것도 초보자에게는 어려운 일이다. 어디서 얼마 만큼의 들여쓰기를 해야 하는지도 처음에는 어렵다. 다행인 것은 비주얼 스튜디오가 자동으로 들여쓰기를 해준다. 당분간은 자동 들여쓰기를 통해서 들여쓰기도 학습하기 바란다.

     

    실습 1: 자동 들여쓰기

    다음과 같이 들여쓰기를 하지 않은 상태로 변경하고 자동 들여쓰기를 실행해 보자.

    /* ex002 */
    /* 소개 */
         #include<stdio.h>
    int main(void)
    {
    printf("안녕하세요.");
     printf("저는 C린이 홍길동입니다.");   //홍길동을 자신의 이름으로 변경한다.
      printf("앞으로 열공하여 C프로그래머가 되겠습니다.");
     return 0;
    }

     

    (1) 코드에 들여쓰기가 안되어진 상태로 수정하고 저장한다.

    (2) Ctrl + A 키를 눌러 코드 전체를 선택한다.

    (2) 메뉴에서

    [편집]을 선택하고

    [고급]

    [선택 영역 서식]을 선택한다.

     

    (4) 다음과 같이 들여쓰기가 반영되어 잘 정리된다.

     

    참고 : 들여쓰기 탭 크기 설정

    탭키를 누르면 4칸 커서가 공백을 두고 오른쪽으로 이동된다. 이때 탭 크기를 변경하여 공백의 크기를 변경할 수 있다.

     

    (1) 주메뉴에서 [도구]-[옵션]을 선택하여 옵션 대화상자를 연다.

    (2) 옵션 대화상자 왼쪽 목록에서

    [텍스트 편집기] [C/C++]를 선택하고 탭을 선택하고

    탭 크기와 들여쓰기를 변경할 수 있다.

    공백 삽입을 선택하고

    [확인] 버튼을 누른다.

     

    반응형

    댓글