310 likes | 462 Views
Programming in C. 목 차. C 의 역사 왜 C 를 배워야 하는가 ? 프로그램 개발 과정 VC++ 의 이용 MinGW 의 이용 연습문제. 1. C 의 역사. C 의 탄생 유닉스 리눅스. 1. C 의 역사 : C 의 탄생. 1972 년 유닉스 (OS) 를 만들기 위해서 탄생 BCPL -> B -> C 유닉스를 디자인하던 켄톰슨이 절친한 친구 데니스 리치에게 유닉스를 위한 언어 요청 데니스리치가 BCPL 을 추천 켄톰슨이 BCPL 을 B 로 발전시킴
E N D
목 차 • C의 역사 • 왜 C를 배워야 하는가? • 프로그램 개발 과정 • VC++의 이용 • MinGW의 이용 • 연습문제
1. C의 역사 • C의 탄생 • 유닉스 • 리눅스
1. C의 역사: C의 탄생 • 1972년 유닉스(OS)를 만들기 위해서 탄생 • BCPL -> B -> C • 유닉스를 디자인하던 켄톰슨이 절친한 친구 데니스 리치에게 유닉스를 위한 언어 요청 • 데니스리치가 BCPL을 추천 • 켄톰슨이 BCPL을 B로 발전시킴 • 데니스리치가 B를 C로 발전시킴
1. C의 역사: 유닉스 • 유닉스(UNIX)는 초창기 ‘유닉스’가 아닌 ‘멀틱스(Multics)라고 불림 • 멀틱스(OS의 일종) • 다중 CPU, 메모리 공유, I/O 자원 공유, 가상메모리, 다중 언어 지원, 보안, 관계형 데이터 베이스, 다중 사용자의 기능을 구현하려고 시도함 • 그 당시의 기술로는 구현 불가능하여 실패함. • 멀틱스가 실패하자 이를 안타까워 했던 켄톰슨이 PDP-7에 멀틱스를 이식하고 조금씩 발전시켜 나감. • 멀틱스는 이때부터 유닉스라고 불림 • 유닉스는 처음에 어셈블리로 작성되었음 (현재 유닉스는 90%가 C언어/10%가 어셈블리어로 구성됨)
1. C의 역사: 리눅스 • 1989년 핀란드 헬싱키대학에 재학 중이던 리누스 토발즈(Linux Torvalds)에 의해서 만들어진 공개 OS • 초창기 리눅스는 주로 개인용 컴퓨터에서 사용되었음 • 소스코드는 완전무료로 공개되었으며 수 많은 프로그래머에 의해서 계속 업그레이드 되고 있음 • 리눅스는 GNU(Gnu Not Unix)를 표방함 • 무료배포와 소스 완전 개방에 의해서 대학과 개발자에게 급속히 확산됨 • 유닉스와 유사한 파일 시스템을 가지고 있으며 많은 변종이 존재함
2. 왜C를 배워야하는가 • C의 유용성 • C의 장점 • C의 단점
2. 왜C를 배워야하는가: C의 유용성 • 실행 속도가 빠름 • 어셈블리어를 제외한 여타의 언어에 비해서 상대적으로 높은 속도를 냄 • 실행 파일의 크기가 작음 • 임베디드 시스템에서 실행파일의 크기는 상당히 중요한 요소임 • 작성하기 쉬움 • 어셈블리어보다 상대적으로 배우거나 작성하기 쉬움
2. 왜C를 배워야하는가: C의 장점 • 실행속도가 빠름 • 다른 언어에 비해서 실행 속도가 높음 • 실행파일의 크기가 작음 • 다른 언어에 비해서 실행파일의 크기가 작음 • 일반적인 상황에서는 실행파일의 크기는 문제가 되지 않지만 임베디드 시스템에서는 중요한 요소가 됨 • 하드웨어를 다루기가 쉬움 • 하드웨어를 다룰 수 있는 많은 기능을 가짐 • 하드웨어를 제어하는 가장 강력한 언어는 어셈블리어이지만 어셈블리어는 배우거나 작성하기가 까다로움 • 다른 플랫폼으로 이식하기 쉬움 • 이미 작성된 프로그램을 다른 환경(유닉스, 윈도우, 리눅스)으로 이식하기가 쉬움
3. 왜C를 배워야하는가: C의 단점 • 배우기가 어려움 • 어셈블리어보다는 쉽지만 다른 언어에 비해서는 배우기가 어려운 편임 • 초보자가 작성하기 어려움 • 세세한 작업을 프로그래머가 모두 챙겨야 함 - 메모리 할당 및 해제를 자동으로 해주지 않음 • 알고리즘에 문제가 발생하면 에러를 잡기가 어려움 • 포인터 부분을 프로그램 한 후 문제가 발생하면 문제점을 찾기가 어려움 • 그래픽 작업이 어려움 • C는 그래픽과 극을 달림 • 그래픽이 필요하면 다른 언어의 힘을 빌려야 함
3. 프로그램 개발과정 • 소스코드 생성 • 에디터(Editor)를 이용하여 프로그램 작성 • 컴파일러 실행 • 목적코드를 생성 (실행파일의 중간 단계) • 오류 수정 • 컴파일러를 수행한 후 코드의 오류를 수정 • 링커 실행 • 실행파일을 생성하는 단계 • 여러 파일(목적코드)을 하나로 합치는 의미를 가지고 있음 • 실행파일 수행
3. 프로그램 개발과정 소스 코드 컴파일러 (Compiler) 목적 코드 (Object code) 시동 코드 (start-up) 라이브러리 코드 링커 (Linker) 실행 코드
3. 프로그램 개발과정 프로그램의 설계 자료구조설계 알고리즘 설계 struct Student { int i; char name[10]; } for ( int j=0 ; j <= 10 ; j++) { ……. } Source Code 생성 Library 테스트 & 디버깅 최종 프로그램
3. 프로그램 개발과정: 소스코드 작성 • 소스코드 # include <stdio.h> main() { printf(“Welcome to the C World.”); } C의 소스코드는 .c로 끝남 위의 프로그램은 화면에 ‘Welcome to the C world.’가 출력됨
3. 프로그램 개발과정: 컴파일러 실행 • 컴파일러를 이용하여 목적(Object)코드를 생성 • 컴파일 • 사람이 이해하는 소스코드를 기계가 이해할 수 있는 기계어로 번역하는 과정 • 컴파일을 수행하는 행위자를 ‘컴파일러’라고 함 • 컴파일을 수행하는 도중 발생되는 에러나 문제점을 디버거(Debugger)의 의해서 해결하기도 함 • 목적(Object)코드 • 컴파일러에 의해서 기계어가 이해할 수 있는 상태로 변환된 파일 • 일반적으로 .o가 생성됨 • 실행파일을 생성하는 중간단계
3. 프로그램 개발과정: 링커, 실행파일 실행 • 링커 실행 • 목적코드를 실행파일로 변환 • .o로 구성된 목적코드를 하나의 실행파일로 만들어 냄 • 다수의 목적코드를 하나로 결합 • 일반적으로 다수의 목적코드를 링커가 하나로 합쳐서 실행파일로 만들어 냄 • 실행파일 실행 • 윈도우 환경: *.exe로 생성 • 유닉스 환경: a.out로 생성
4. VC++ 이용 • VC++ 실행 • 프로젝트 생성 • sample.c 생성 • sample.c 편집 • 프로그램 작성 • 컴파일, 링크, 실행
5. MinGW 이용 • MinGW: Minimalist GNU for Windows • MinGW Developer Studio 사용하는 방법: • http://www.parinyasoft.com/또는 • http://www.simtel.net/product.php%5Bid%5D74844%5BSiteID%5Dfilebasket
5. MinGW 이용 Project name을 입력 File new Project 폴더를 지정
연습문제1 • C의 장점과 단점에 대해서 설명하시오. • 컴파일과 링크에 대해서 설명하시오. • 소스 프로그램, 오브젝트(목적) 프로그램, 실행 프로그램의 차이점을 설명하시오.
연습문제2 • 자신의 이름을 출력하는 프로그램을 작성하시오.
연습문제3 • 자신의 이름을 출력하는 함수를 작성하고 오브젝트 파일을 생성하시오. • main() 함수와 자신의 이름을 출력하는 함수를 링커로 결합하여 하나의 실행파일을 생성하시오.