본문 바로가기

C Langauage

Chapter 1. C언어 입문

Chapter 1. C언어 입문

1. C언어란

 - 프로그램을 만들 때 쓰이는 언어 중하나 이며 오늘날 쓰이는 언어 중 가장 기본이 되는 언어이다.

 - C언어는 사람과 컴퓨터가 소통할 수 있도록 하는 매개체로 컴파일러의 일종이다.

 - 컴파일러

   : 컴파일러란 컴퓨터는 0,1로 된 언어(기계어)를 사용하는데 이를 사람이 이해할 수 있도록 바꿔주는 장치이다.

 

2. C언어의 역사

 - C언어는 Unix 운영체제 시스템 개발을 위해 Denis Ritchie와 Ken Thompson이라는 사람이 설계한 언어이다.

 - C언어는 B언어에서 발전된 언어로써 발전과정은 다음과 같다. 

 ALGOL 60 → CPL → BCPL → B언어 → C언어

 

 

3. C언어의 특징

 - 장점

  1) 구문이 간결하고 프로그램에 필요한 핵심적인 기능을 제공한다.

  2) 다른 언어에 비해 이식성이 좋다.

  3) C언어로 만든 프로그램은 크기도 작고 실행속도도 빠르다.

 - 단점

  1) 배우기 어렵다.

  2) 사용하기 어렵다.

  

4. 프로그램 개발 과정 

 1) 소스 코드 작성 : 개발 환경에서 제공하는 소스 코드 편집기나 메모장과 같은 텍스트 편집기를 이용해 소스 코드를 작성하는 단계. 소스 코드를 작성하기 전에는 먼저 프로그램에 대한 설계가 필요하다.

 2) 컴파일 : C언어를 컴퓨터가 알고 있는 언어인 기계어로 바꿔주는 단계.

     만약 컴파일 시 에러가 발생한다면(컴파일 에러) 소스 코드 내에서 잘못된 것을 찾아야한다.

 3) 링크 : 컴파일이 소스 코드 파일 하나하나를 보는 단계라면 링크는 전체 파일을 상관시켜주는 단계이다.

     만약 링크 시 에러가 발생한다면(링크 에러) 소스 파일 사이의 상관관계를 파악해 수정해야한다.

 4) 실행 : 실행 단계는 위 단계를 모두 정상적으로 거쳤을 때 실행파일이 만들어지고 나서 실행파일을 실행해서 원하는 결과를 얻을 수는지 확인하는 단계이다. 실행단계에서는 실행에러가 발생할 수 있다.

     실행 에러란 잘못된 실행 결과를 생성하거나 프로그램 실행 중에 프로그램이 죽는 문제가 발생하는 것을 말한다.

 5) 디버깅 : 실행 에러를 찾고 수정하기 위해 거치는 단계. 실행 에러는 프로그램의 논리가 잘못되어 발생하는 에러로 디버깅 과정을 통해서 실행 에러가 발생한 곳을 찾을 수 있다. 디버깅을 할 때는 전체적인 소스 코드의 흐름을 알아야 하며 잘못된 부분을 찾아 수정해 다시 컴파일 링크 실행단계를 거친다.

 

5. 프로그램의 기본 구성

 - 헤더(Header)

  · 라이브러리가 제공하는 함수에 대한 정보를 갖는 파일

  · 일반적으로 함수의 선언만 포함되어있다.

  · 확장자 : .h를 사용

 - 소스(Source)

  · 여러 함수와 변수로 구성되어 프로그램이 직접적으로 구현된 파일

  · 함수 중 가장 핵심이 되는 Main 함수를 중심으로 되어 있으며 여러 소스파일을 링크시켜 연결할 수 있다.

  · 확장자 : .c를 사용

 - 함수(Function)

  · 프로그램에서 처리할 내용을 모아두는 기본 단위로 특정 인자를 받아 결과를 반환하는 역할을 한다.

  · C언어의 프로그램은 하나 이상의 함수로 구성되어 있다.

 - main 함수(Main Function)

  · 프로그램이 처음 시작될 때 호출되는 함수로 진입점 함수라고 불린다.

  · C언어로 프로그래밍을 할 때는 이 main 함수가 꼭 필요하다.

 - 출력함수(Output Function)

  · 프로그래밍을 한 결과를 화면에 출력할 때 호출되는 함수

 - 입력함수(Input Function)

  · 프로그래밍에 필요한 값을 입력 받을 때 호출되는 함수

 - 변수(Variable)

  · 값이 변경될 수 있는 데이터

  · 데이터형에 따라 저장할 수 있는 데이터가 달라진다.

 - 상수(Constant)

  · 값이 변경될 수 없는 데이터

 - 주석(Comment)

  · 컴파일의 대상이 되지 않는 코드로 코드 중간에 메모를 하기 위한 용도로 사용된다.

 - 연산자(Operator)

  · 값을 연산할 때 쓰이는 기호

 

6. Program(Packet)의 생성과 구성
 - 생성 절차

  · Source File
  ◦  Programming Language로 제작된다.
  ◦  : C, C++, Java etc.
  · Compiler
  ◦ Preprocess, Assemble, Compile이 합쳐진 과정
  ◦ Preprocess
   ▹ 전처리과정이라고도 하며 C Language에서 #으로 시작하는 명령을 처리하는 과정
  ◦ Assemble
   ▹ Programing Language로 이루어져 있는 Source File을 Assembly Language로 변환하는 과정
  ◦ Complie
   ▹ Assembly Language로 구성된 File을 Computer가 실행할 수 있는 기계어로 변환하는 과정
  · Object File
  ◦ 목적 File 목적 부호 또는 목적 File을 수용하고 있으며 기계어로 이루어 져있는 File
  · Link
  ◦ 하나의 실행 File을 만들기위해 필요한 각종 File들을 하나로 연결하는 과정
  ◦ 필요한 File : Object File(*.obj), Library File(*.lib, *.dll)
  · Excute File
  ◦ 실행을 목적으로 만들어졌으며 기계어로 이루어져 있는 실행 File
 - Library File
  · 함수의 명령 Code가 들어있는 File
  · Library File의 종류
  ◦ Program안으로 포함되는 형태별로 Static Link Library File, Dynamic Link Library File로 나눌 수 있다.
  ◦ Static Link Library File
   ▹ Compile 과정 수행 후 Link 과정 수행 시 Program 안에서 사용하는 함수의 명령 Code가 Program 안으로 포함되는 형태의 Library File
   ▹ 확장자 : *.lib
   ▹ 장점
    ▸ Program 실행 시 별도의 File이 필요하지 않음
   ▹ 단점
    ▸ Memory 및 Disk 사용량 증가
  ◦ Dynamic Link Library
   ▹ Compile 과정 수행 후 Link 과정 수행 시 Program 안에서 사용된 함수의 정보만 포함되는 형태의 Library File로 Program 실행 시 해당 함수의 명령 Code가 들어있는 File이 포함된다.
   ▹ 확장자 : *.dll
   ▹ Linux의 *.so(Shared Object) File과 같은 역할을 한다.
   ▹ 장점
    ▸ Memory 및 Disk 사용량을 절약할 수 있고 Program을 Module화 할 수 있다.
    ▸ Program의 Module화 때문에 Upgrade나 Update에 용이하다.
   ▹ 단점
    ▸ Program 실행 시 별도의 File이 필요
  · Library Load 방법
  ◦ Implict Loading

   ▹ 암시적, 묵시적 Loading이라고도 한다.
   ▹ Program 실행과 동시에 '*.lib' File과 '*.dll' File이 같이 Loading된다.
   ▹ Program을 '*.dll' File, '*.lib' File, Header File로 설정한다.
   ▹ '*.lib' File은 함수의 명령 Code만 포함되어 호출만 가능하므로 '*.dll' File이 별도로 필요하다.
   ▹ Programming의 정적 Binding과 비슷한 개념으로 Library File이 Program의 시작부터 끝까지 Load된다.
  ◦ Explict Loading

   ▹ 명시적, 강제적 Loading이라고도 한다.
   ▹ Program 실행 후 원하는 시점에 Load되고 해제된다.
   ▹ 주요 함수
    ▸ LoadLibrary : DLL Module 할당(Loading)한다.
    ▸ GetProcAddress : 호출할 함수의 주소를 얻어온다.
    ▸ FreeLibrary : 할당 되어있던 DLL Module 해제한다. 

'C Langauage' 카테고리의 다른 글

Chapter 6. 배열(Array)과 문자열(String)  (0) 2015.08.05
Chapter 5. 제어문  (0) 2015.08.05
Chapter 4. 연산자(Operator)  (0) 2015.08.05
Chapter 3. 자료의 입출력  (0) 2015.08.05
Chapter 2. 데이터형, 변수, 상수  (0) 2015.08.05