본문 바로가기

공부/C언어

(C) C언어에 대한 기본적인 지식 2

프로그래밍 언어

프로그래밍 언어: 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어

 

컴파일러: 프로그래밍 언어로 작성된 프로그램을 컴퓨터가 이해할 수 있도록

             기계어로 번역하는 역할을 함. 이를 컴파일(compile)한다고 함.

 

프로그래밍 언어의 필요성:

  • 사람과 컴퓨터가 서로 의사교환을 하기 위해서
  • 사람이 컴퓨터에게 지시할 명령어를 프로그래밍 언어로 기술

 

기계어와 어셈블리어

기계어: 0과 1로 구성되는 언어체계. 컴퓨터가 이해할 수 있는 유일한 언어이다.

 

어셈블리어: 기계어의 연산코드와 피연산자를 기호형태로 일대일 대응시킨다.

                프로그래머가 기계어 보단 더 이해하기 쉽다.

                  필자: ??????

 

순서 기계어 어셈블리어 의미
명령어1 0101 000000000100 LDA A 메모리 A의 내용을 누산 레지스터(AC)에 저장
명령어2 0111 000000000110 ADD B 메모리 B의 내용과 누산 레지스터(AC)의 값을 더하여 누산 레지스터 (AC)에 다시 저장
명령어3 0100 000000000111 STA C 누산 레지스터(AC)의 값을 메모리 C에 저장
명령어4 0011 000000000000 HLT 프로그램 종료

두 정수의 합을 위한 명령어 집합 (C = A + B)

 

저급 언어와 고급 언어

고급언어(HLL: High Level Language)

  • 사람이 이해하기 쉬운 언어
  • C, C++, Java, C#, ...

저급언어(LLL: Low Level Language)

  • 컴퓨터가 이해하기 쉬운 언어
  • 기계어, 어셈블리어, ...

저급언어라고 질이 낮은 언어가 아니다. 각각의 언어가 지닌 장단점이 다르기 때문에 고급언어가

저급언어보다 좋다고 판단하는 것은 옳지않다.

 

C

  • B언어에서 발전된 언어
  • 1972년, UNIX 운영체제 작성을 위한 시스템 프로그래밍 언어로 설계됨
  • AT&T의 벨 연구소의 Dennis Ritchie가 개발
  • 컴파일러나 많은 소프트웨어 도구들도 C언어로 개발
  • 다른 고급언어에 비해 하드웨어에 대한 보다 확실한 통제 가능
  • 프로그램의 이식성이 높음(CPU 종류, 운영체제 차이 덜 민감)

C++

  • 객체지향 프로그래밍 지원
    • C언어가 지닌 절차지향적 특성 또한 그대로 계승하면서 객체의 상속성(inheritance) 등의
      개념을 추가
  • C언어의 확장(기존 C언어로 개발된 모든 프로그램들을 수정 없이 그대로 사용 가능

 

통합 개발 환경

  • Integrated Development Environments
  • 프로그램 개발에 필요한 컴파일러, 디버거, 링커, 에디터 등을 통합적으로 제공하는 개발 환경

 

프로그램 개발 과정

링커(linker) 

  • 여러 개의 목적 파일들을 라이브러리 함수와 연결해서 하나의 파일인 실행파일을 생성

로더(loader)

  • 실행파일을 컴퓨터의 주기억장치에 로드해서 프로그램을 실행 가능하게 함

디버깅(debugging)

  • 프로그램 개발과정에서 컴파일 에러나 실행 에러를 수정하는 과정

프로그램의 완성과정

무한 츠쿠요미

 

* 참고하는 서적과 강의자료는 모두 Visual C++를 기준으로 설명하지만, 필자는 편리함을 위해

Dev C++을 사용함을 알림.