[Warming up C Programming] Chapter 1 : 프로그래밍과 언어

eunee22·2023년 7월 6일

Warming-up C Programming

목록 보기
1/10
post-thumbnail

제가 대학교 1학년 때 C언어 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다. (2022.3 ~ 2022.6)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.

대학에 처음 들어와 정리한 내용이라 모든 내용을 담고 싶은 욕심에 정리가 많이 지져분하고 어설픈점 양해 부탁드립니다..!!

🍑프로그래밍

  • 컴퓨터 : 다양한 기기 안에 내장 되어있음.
    ex) pc, 노트북, 스마트폰, 태블릿

  • 하드웨어 : 컴퓨터 내에 있음
    ex) cpu, 메모리, 입출력 장치 등

  • 운영체제 : 하드웨어를 제어, 관리

  • 소프트웨어 : 컴퓨터 하드웨어에서 실행되는 프로그램 또는 응용 프로그램

  • 프로그램 : 컴퓨터 하드웨어가 수행할 일련의 작업을 기술하고 있는 명령어의 모임, 컴퓨터 하드웨어가 여러 가지 다양한 기능을 제공할 수 있게 만드는 것

  • (cpu)명령어 : cpu가 처리 할수 있는 이진코드

  • : 스마트폰에서 실행되는 프로그램

  • 프로그래밍 : 프로그램을 작성하는 일 또는 그 과정

🍑프로그래밍 언어

  • 프로그래밍 언어 : 프로그램에서 컴퓨터가 수행해야 할 다양한 작업을 기술하는데 사용되는 언어

  • 저급언어 : 기계종속적. 컴퓨터가 직접 이해할 수 있다. cpu가 어떻게 동작하는지를 잘 이해해야 프로그램을 작성할 수 있다. cpu의 종류가 달라지면 프로그램을 다시 작성해야한다.

    • 기계어(.exe) : 0과 1로 된 cpu 명령어. 유일하게 컴퓨터가 직접 처리할 수 있는 프로그래밍 언어.
      • 이진수로 표현되므로 사람이 사용하기에 불편하고 실수가 발생하기 쉽다.
    • 어셈블리어(.obj) : cpu 명령어에 일대일로 대응되는 니모닉 기호를 사용. 어셈블러에 의해 기계어로 변환
    • 어셈블러 : 어셈블리어로 작성된 프로그램을 기계어로 변환하는 프로그램
  • 고급언어 : 기계독립적. 사람이 사용하는 자연어에 가까운 언어. cpu의 종류와 하드웨어의 특성에 얽매이지 않고 프로그램을 작성할 수 있다. 프로그램 작성할 때는 텍스트 파일 형태로 소스파일 작성.
    소스파일을 컴파일한 결과로 생성되는 이진 파일이 사용자에게 배포되는 실행파일.

    • ex) C, C++, java, python
    • 컴파일러 : 고급언어로 작성된 프로그램을 기계어로 변환하는 프로그램(소스파일 / 컴파일/ 어셈블리어/ 어셈블러(컴파일러에 내장)/ 기계어)

🍑C 언어의 역사

표준 C

  • 표준c로 작성된 소스 코드는 모든 c 컴파일러에서 컴파일되고 동일하게 실행될 수 있다.
  • c컴파일러는 표준 c기능과 자신만의 기능을 제공한다.
  • 1972년 데니스 리치와 켄 톰슨에 의해 운영체제 같은 시스템 프로그램을 개발하기 위해서 처음 개발

K&R C

  • 1978년에 브라이언 커니건이 제시한 c언어에 대한 기본 명세.

ANSI C, C89

  • ANSI에서 제정한 c언어의 표준. 차후 개정된 표준c와의 구분을 위해서 c89.

ISO C, C90

  • ISO에서 ANSI C를 국제표준으로 지정하면서 c90. c89와 같은 버전임.

C99

  • 1999에 개정 및 발표된 c표준. 한줄주석, 인라인함수, 새로운 데이터형, 가변 길이 배열, 개선된 IEEE 754 실수 지원, 가변 인자 메크로 등 추가

C11

  • 2011년에 발표된 가장 최근 버전의 c 표준.

🍑C/C++ 컴파일러

  • cc++은 서로 다른 언어지만 컴파일러 때문에 함께 사용되는 경우가 많다.(대부분의 컴파일러가 두 역할 모두 제공)

    • C++ builder, GCC, visual C++ 등
  • c++ 컴파일러로 c 컴파일을 하려면 소스파일의 확장자를 변경하면 된다.

    • c. 은 c
    • .cpp는 c++

🍑C 언어의 특징

장점

1. 간결한 구문

2. 핵심적 기능 제공

  • 절차적 프로그래밍
  • 고수준의 지원 기능

3. 유연성

  • 프로그래머가 목표하는 기능 구현에 제약 거의 X

4. 이식성

  • 소스코드 변경없이 여러 하드웨어 플랫폼이나 운영체제에서 사용되도록 컴파일 될수 있다.
  • 동일한 c 소스코드를 이용해서 특정 cpu용 기계어 코드를 여러 가지로 생성할 수 있다.

5. 저수준의 지원 기능

  • 실행파일의 크기가 작다.
  • 실행속도가 빠르다. (성능이나 효율성 우선시 될시 사용.)

6. 최신 언어의 근원

단점

1. 배우기 어렵다

2. 사용하기 어렵다

  • 프로그래머가 주의해야 하는 부분이 많음.(유연성)

🍑C 언어를 배워야 하는 이유

1. 프로그래밍의 기본 개념 이해에 도움이 된다.

  • 제어 구조와 메모리 구조, 함수나 사용자 정의형 등

2. 프로그램 내부 동작 원리를 이해하는데 도움이 된다.(다른 언어에서)

3. 공용어 역할

  • 다양한 알고리즘이나 소스 코드, 라이브러리가 c로 개발 및 공개되어 있다.
  • 다양한 프로그래밍 정보를 쉽게 활용할 수 있다.

4. c언어를 알면 다른 언어를 배우는 것이 쉬워진다.

  • 대부분의 최신 언어는 c로부터 파생이 되었다.

🍑C 언어의 활용 분야

1. 성능 위주의 개발
2. 이식성이 필요한 경우

  • 운영체제 개발
    • 컴퓨터 시스템을 구동해야 하므로 성능이 최우선.
    • 다양한 컴퓨터 시스템에서 실행될 수 있어야 하므로 이식성이 필수적
  • 컴파일러 개발
  • 데이터베이스 개발
  • 고성능 애플리케이션 개발
  • 임베디드 프로그램 개발
    • 임베디드 시스템에서 수행되는 프로그램
    • 임베디드 시스템 : 범용 목적이 아닌 특수 목적의 컴퓨터를 내장하고 있는 장치
    • 제한된 하드웨어에서 자원 위에서 실시간 제약 조건으로 실행되어야 하기에 프로그램 크기가 작아야하고, 오랜시간 동안 오류 없이 안정적으로 실행될수 있어야함.
    • c는 필요한 기능만 구현해서 최소한의 코드만 작성하므로 적합.

🍑C 프로그램 개발 순서

프로그램 설계

: 프로그램이 어떤 순서로 작업을 처리할지 설계

  • 알고리즘 : 어떤 문제를 논리적으로 해결하기 위한 절차나 방법.
  • 자연어(알고리즘이 처리할 내용을 말로 풀어서 작성)나 순서도(알고리즘의 처리 순서를 기호와 도형으로 표현,
  • 의사 코드(프로그래밍 언어를 흉내 내 알고리즘을 대략적으로 기술 – 표현이 어려운 부분은 자연어로 하기도)를 이용해서 기술가능.

소스 코드 작성

  • 소스 코드 : 프로그램이 처리할 작업이나 알고리즘을 특정 프로그래밍 언어로 기술한 것.
  • 텍스트 편집기, 소스코드 편집기를 이용해서 작성.
  • 소스 파일 : 텍스트 파일로 저장된 소스 코드. 프로그래밍 언어에 따라 고유의 확장자를 사용.

컴파일

1. 전처리
: 컴파일러에 내장된 전처리기를 수행하여 소스파일을 컴파일할 수 있도록 준비.

  • 전처리기는 다른 파일을 포함하거나, 소스 파일 내의 특정 문자열을 다른 문자열로 바꿈.
  • 조건에 따라서 코드의 일부를 컴파일, 또는 컴파일 하지 않도록 선택하는 기능 제공.
  • 전처리기 문장은 #으로 시작.
    • ex) #include #define

2. 컴파일
: 구문 분석, 오브젝트 코드 생성(컴파일 에러가 없을 때)

  • 구문분석 : 소스코드가 c/c++ 문법에 맞게 작성되었는지 검사하는 것.
  • 컴파일 에러 : 구문 분석 시 잘못된 부분이 있을 때 발생.
  • 오브젝트 코드 : 소스 코드를 기계어로 변환한 것.
  • 오브젝트 파일(.obj) : 오브젝트 코드를 담고 있는 파일.
    • 아직 실행 파일이 아님.
    • 소스파일이 여러개 일 때는 소스파일 마다 하나씩 생성.

3. 링크
: 오브젝트 파일과 라이브러리를 링크 후 실행 파일 생성

  • 링커 : c/c++ 컴파일러에 내장되어 링크를 수행하는 프로그램
  • 링크 에러 : 링크할 때 문제가 있으면 발생.
    • 없어야 실행파일 생성 가능.
    • 해결을 위해서는 여러 소스 파일을 상관관계를 함께 파악해야 하므로 컴파일 에러에 비해 찾기가 쉽지 않음.

실행

  • 실행 에러 : 프로그램이 잘못된 실행 결과를 생성하거나 실행 중에 프로그램이 죽는 것.
    • 프로그램의 논리가 잘못된 경우에 발생.
  • 디버깅 : 프로그램이 올바른 순서로 실행되는지, 실행 중에 프로그램 내에서 사용된 수식의 값이 맞는지 확인.

🍑visual studio를 이용한 C 프로그램 개발

  • visual c ++ 은 통합 개발 환경
    • 디버깅 소스 파일 작성, 컴파일, 실행 및 디버깅을 한 화면에서 처리할 수 있음.
  • visual c ++ 은 visual studio에 내장된 프로그램.

visual studio의 프로젝트(.vcxproj – 프로젝트 정보를 저장하기 위해)

  • 간단한 프로그램의 경우 하나의 소스파일로 구성되지만 아닌 경우에는 소스 파일을 여러개로 나누어 작성하게 되는데, 이때는 각각의 소스파일을 컴파일해서 오브젝트 파일을 얻고, 링크 단계에서 오브젝트 파일과 라이브러리를 링크하여 실행파일을 생성.

  • 프로그램을 만들기 위해 필요한 모든 정보가 포함

    1. 어떤 소스 파일과 헤더 파일이 사용되는지에 대한 정보
    2. 소스 파일을 컴파일할 때 사용되는 컴파일 옵션
    3. 오브젝트 파일과 라이브러리를 링크할 때 사용되는 링크 옵션
  • 프로젝트별로 폴더를 생성해 프로젝트에 관련된 파일을 모아두고 관리.

  • c/c++ 컴파일러는 프로젝트 단위로 작업을 수행

visual studio의 솔루션(.sln)

  • 솔루션 : 일종의 작업공간. 서로 관련된 프로젝트들을 함께 관리, 등록 하는 기능제공.
    • 디폴트로 솔루션 폴더의 서브 디렉터리로 프로젝트 폴더를 생성, 관리
    1. 솔루션에 신경쓰지 않고 작업 : 디폴트로 프로젝트 생성 시 솔루션이 함께 생성.
    2. 관련 프로젝트를 모아 솔루션 구성 : 솔루션과 프로젝트를 따로 생성하고 솔루션에 프로젝트 등록.
      • 빈 솔루션 먼저 생성

🍑visual studio의 C프로그램 개발 순서

프로젝트 생성

  • 프로그램의 유형 선택
  • 선택한 유형에 따라 기본적인 컴파일과 링크 옵션이 결정되고 경우에 따라서 소스파일도 함께 생성.

새 항목 추가

  • 1단계에서 생성된 경우 코드 작성.
  • 아닌 경우 소스 파일, 헤더파일을 생성 후 새 항목으로 추가.
  • 새 항목 추가로 생성된 소스 파일이나 헤더 파일은 프로젝트에 등록, 원하면 제거 가능.

소스 코드 작성

  • 소스 코드 편집기를 이용해서 소스 파일이나 헤더파일 작성.

빌드

  • 컴파일, 링크 수행
  • visual studio에서는 솔루션 빌드 (컴파일 + 어셈블 + 링킹)

실행 및 디버깅

  • 컴파일 에러나 링크 에러가 없으면 실행 파일 생성.
  • 실행 에러가 있으면 디버깅을 통해서 찾고 수정.

🍑visual studio 사용법

  • 콘솔 프로그램 : 키보드로 입력을 받아서 콘솔(명령 프롬프트)에 출력하는 프로그램.
  • 키보드입력과 텍스트 출력만 가능하다.
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글