제가 대학교 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++ 컴파일러
🍑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. 전처리
: 컴파일러에 내장된 전처리기를 수행하여 소스파일을 컴파일할 수 있도록 준비.
- 전처리기는 다른 파일을 포함하거나, 소스 파일 내의 특정 문자열을 다른 문자열로 바꿈.
- 조건에 따라서 코드의 일부를 컴파일, 또는 컴파일 하지 않도록 선택하는 기능 제공.
- 전처리기 문장은 #으로 시작.
2. 컴파일
: 구문 분석, 오브젝트 코드 생성(컴파일 에러가 없을 때)
- 구문분석 : 소스코드가 c/c++ 문법에 맞게 작성되었는지 검사하는 것.
- 컴파일 에러 : 구문 분석 시 잘못된 부분이 있을 때 발생.
- 오브젝트 코드 : 소스 코드를 기계어로 변환한 것.
- 오브젝트 파일(.obj) : 오브젝트 코드를 담고 있는 파일.
- 아직 실행 파일이 아님.
- 소스파일이 여러개 일 때는 소스파일 마다 하나씩 생성.
3. 링크
: 오브젝트 파일과 라이브러리를 링크 후 실행 파일 생성
- 링커 : c/c++ 컴파일러에 내장되어 링크를 수행하는 프로그램
- 링크 에러 : 링크할 때 문제가 있으면 발생.
- 없어야 실행파일 생성 가능.
- 해결을 위해서는 여러 소스 파일을 상관관계를 함께 파악해야 하므로 컴파일 에러에 비해 찾기가 쉽지 않음.
실행
- 실행 에러 : 프로그램이 잘못된 실행 결과를 생성하거나 실행 중에 프로그램이 죽는 것.
- 디버깅 : 프로그램이 올바른 순서로 실행되는지, 실행 중에 프로그램 내에서 사용된 수식의 값이 맞는지 확인.
🍑visual studio를 이용한 C 프로그램 개발
- visual c ++ 은 통합 개발 환경
- 디버깅 소스 파일 작성, 컴파일, 실행 및 디버깅을 한 화면에서 처리할 수 있음.
- visual c ++ 은 visual studio에 내장된 프로그램.
visual studio의 프로젝트(.vcxproj – 프로젝트 정보를 저장하기 위해)
-
간단한 프로그램의 경우 하나의 소스파일로 구성되지만 아닌 경우에는 소스 파일을 여러개로 나누어 작성하게 되는데, 이때는 각각의 소스파일을 컴파일해서 오브젝트 파일을 얻고, 링크 단계에서 오브젝트 파일과 라이브러리를 링크하여 실행파일을 생성.
-
프로그램을 만들기 위해 필요한 모든 정보가 포함
- 어떤 소스 파일과 헤더 파일이 사용되는지에 대한 정보
- 소스 파일을 컴파일할 때 사용되는 컴파일 옵션
- 오브젝트 파일과 라이브러리를 링크할 때 사용되는 링크 옵션
-
프로젝트별로 폴더를 생성해 프로젝트에 관련된 파일을 모아두고 관리.
-
c/c++ 컴파일러는 프로젝트 단위로 작업을 수행
visual studio의 솔루션(.sln)
- 솔루션 : 일종의 작업공간. 서로 관련된 프로젝트들을 함께 관리, 등록 하는 기능제공.
- 디폴트로 솔루션 폴더의 서브 디렉터리로 프로젝트 폴더를 생성, 관리
- 솔루션에 신경쓰지 않고 작업 : 디폴트로 프로젝트 생성 시 솔루션이 함께 생성.
- 관련 프로젝트를 모아 솔루션 구성 : 솔루션과 프로젝트를 따로 생성하고 솔루션에 프로젝트 등록.
🍑visual studio의 C프로그램 개발 순서
프로젝트 생성
- 프로그램의 유형 선택
- 선택한 유형에 따라 기본적인 컴파일과 링크 옵션이 결정되고 경우에 따라서 소스파일도 함께 생성.
새 항목 추가
- 1단계에서 생성된 경우 코드 작성.
- 아닌 경우 소스 파일, 헤더파일을 생성 후 새 항목으로 추가.
- 새 항목 추가로 생성된 소스 파일이나 헤더 파일은 프로젝트에 등록, 원하면 제거 가능.
소스 코드 작성
- 소스 코드 편집기를 이용해서 소스 파일이나 헤더파일 작성.
빌드
- 컴파일, 링크 수행
- visual studio에서는 솔루션 빌드 (컴파일 + 어셈블 + 링킹)
실행 및 디버깅
- 컴파일 에러나 링크 에러가 없으면 실행 파일 생성.
- 실행 에러가 있으면 디버깅을 통해서 찾고 수정.
🍑visual studio 사용법
- 콘솔 프로그램 : 키보드로 입력을 받아서 콘솔(명령 프롬프트)에 출력하는 프로그램.
- 키보드입력과 텍스트 출력만 가능하다.