02 C 언어 개요

Download Report

Transcript 02 C 언어 개요

Part 02 C 언어 개요
©우균, 창병모
1
이 장의 내용






C 언어 소개
간단한 C 프로그램
Microsoft Visual C++ IDE
프로그래밍 환경
더 간단한 C 프로그램
표준출력 함수 printf
2
2.1 C 언어 소개
3
C 언어 유래

1972년 Dennis Ritchie가 설계함


C 언어에 직접 영향을 준 언어들


UNIX 운영체제 개발에 사용됨
Algol  CPL  BCPL  B  C
특징





Dennis Ritchie
구조화된 언어로서 모듈별 설계가 가능하다.
이식성이 높다(다양한 하드웨어에서 사용 가능).
효율적이다(처리속도가 빠르다).
다양한 연산자를 제공한다.
동적 메모리 관리가 가능하다.
믿거나 말거나…
C 언어는 구형 컴퓨터에서
게임을 하기 위해 개발했다
는 전설이 있음
4
C 언어의 철학 및 강점

C 언어의 설계 철학: 간결성




i = i + 1; 보다는
i += 1; 이 간결하고, 이것 보다는
i++; 이 간결하다.
C 언어의 강점



다양한 플랫폼에서 사용 가능
 매우 이식성이 높기 때문에…
어셈블리어에 대한 대안
 C의 역사를 생각해 보자
 device driver 프로그램에 매우 적절함
꽤 쉬우면서도 빠르다!
 고급 언어의 특성(쉬움)과 저급 언어의 강점(빠름)을 겸비
5
2.2 간단한 C 프로그램
6
간단한 C 프로그램(hello.c)
실행결과:
Hello, World !
7
C 컴파일러

컴파일러란?




통역사(사람과 컴퓨터 사이의 통역 담당)
C 프로그램을 컴퓨터가 수행할 수 있도록 번역해 주는 놈
CPU는 C 프로그램을 모른다
CPU는 이진코드 형태의 기계어(machine language)만 안다
C 프로그램
컴파일러
int main…

기계어
프로그램
010101…
컴파일러 종류


상용 컴파일러: Microsoft Visual C/C++, Borland C/C++
무료 컴파일러: 부록 B 참고
8
컴파일해 보자

Microsoft Visual C++ 통합개발환경



프로젝트 구성 창
편집 창
메시지 창
9
MSVC IDE에서 프로그램 개발하기

프로그램 개발 단계
1.
2.
3.
4.
5.
프로젝트 만들기
파일 추가
프로그램 편집
컴파일&빌드
실행&디버깅
10
MSVC IDE: 프로젝트 만들기(1/5)
1.
File  New
Projects 탭에서
Win32 Console Application 선택
2.
3.
4.
5.
Location 선택
프로젝트 이름 입력
OK
Finish & OK
11
MSVC IDE: 프로젝트 만들기(2/5)
1.
2.
File  New
Location 선택
프로젝트를 저장할 폴더 선택
3.
4.
5.
프로젝트 이름 입력
OK
Finish & OK
12
MSVC IDE: 프로젝트 만들기(3/5)
1.
2.
3.
File  New
Location 선택
프로젝트 이름 입력
Hello
4.
5.
OK
Finish & OK
13
MSVC IDE: 프로젝트 만들기(4/5)
1.
File  New
Win32 Console Application 선택
2.
3.
4.
5.
Location 선택
프로젝트 이름 입력
OK
Finish
& OK
14
MSVC IDE: 프로젝트 만들기(5/5)

Hello 프로젝트가 생성된 화면
15
MSVC IDE: 파일 추가(1/3)
1.
File  New
Files 탭에서
C++ Source File 선택
2.
3.
파일이름 입력
OK
16
MSVC IDE: 파일 추가(2/3)
1.
2.
File  New
파일이름 입력
Add to project 확인
hello.c
3.
OK
17
MSVC IDE: 파일 추가(3/3)

소스파일 hello.c가 Hello 프로젝트에 추가된 화면
18
MSVC IDE: 파일 편집

편집 창에 프로그램 내용을 적어 넣는다.
19
MSVC IDE: 컴파일 및 빌드

컴파일: Build  Compile hello.c


실행파일(.exe) 빌드에 필요한 목적파일(.obj) 생성
빌드: Build  Build Hello.exe

필요한 목적파일이 없으면 해당 파일을 컴파일
20
MSVC IDE: 실행 및 디버깅

실행: Build  Execute Hello.exe


Hello.exe가 없으면 빌드를 먼저 수행한다.
디버깅


프로그램 오류(bug)를 떼어 내는(de-) 과정
수행 결과가 이상하면 프로그램을 수정하고(디버깅)
컴파일&빌드, 실행 과정을 반복한다.
21
MSVC IDE: 컴파일 오류 수정

컴파일 시간 오류


프로그램 구문 오류로 인해 목적파일을 생성할 수 없는 상태
IDE의 메시지 박스에서 확인한 후, 오류 메시지를 더블클릭하면
오류 위치를 가리킨다.
22
MSVC IDE: 비하인드 스토리


생성된 실행파일 Hello.exe를 찾아 보자!
프로젝트 폴더 찾기



앗, 이럴 수가!



프로젝트 생성 위치에 있음
잊은 사람은 다음부터는 프로젝트 생성위치를 잘 봐 두자!
프로젝트 폴더에 실행파일(*.exe)파일이 없네
Debug 폴더에 있음
비하인드 스토리
23
hello.c 분석
주석
전처리기 지시자
라이브러리 puts 호출
운영체제에 0값 리턴
main 함수
24
main의 리턴값



main의 반환 값은 항상 정수여야 함
따라서 int main()이라고 선언해 줌
비 표준 방법


void main() { }도 컴파일은 잘 됨
그러나 표준에 맞는 방법은 아님
25
2.3 프로그래밍 환경
26
소스파일에서 실행파일까지
27
명령줄 프로그래밍 환경

명령줄 프로그래밍 환경이란?



필요한 프로그램을 별도로 실행시켜 프로그래밍 하는 환경
필요한 프로그램: 편집기, 컴파일러, 디버거
윈도우 명령창에서 프로그램을 개발하는 과정
28
명령줄 프로그래밍 환경 체험
1.
2.
PATH에 MSVC 경로 추가
내 컴퓨터(속성)  고급  환경변수  Path 편집
프로그램 편집
notepad hello.c
3.
컴파일
cl hello.c
4.
실행
.\hello.exe
29
2.4 더 간단한 C 프로그램
30
main의 리턴값이 없으면?
리턴값이 없으므로
경고(warning)가 발생할 수 있다!
31
가장 간단한 C 프로그램
리턴 타입을 생
략하면 int로
간주한다.
실행결과:
32
2.5 표준출력 함수 printf
33
printf를 이용한 Hello
개행문자(newline)가 출력되지 않
았다.
출력 위치(output marker)가 다음
행으로 바뀌지 않았다.
34
출력위치

hello.c와 hello2.c의 출력을 비교해 보자




출력위치(output marker)



커서: 입출력 위치를 알리는 기호(네모 또는 밑줄)
커서 위치가 다른 것을 알 수 있음
이유가 뭘까?



개행문자(newline character) 위치에 주의
Press any key의 위치가 바뀌었다.
명령창에서 수행해 보자.
puts는 개행문자를 자동으로 삽입하지만
printf는 개행문자를 자동으로 삽입하지 않는다
개행문자란?

한 행의 끝을 알리는 제어문자
35
C 언어의 개행문자

\n으로 나타냄



두 개의 문자로 하나의 문자를 나타냄
특수문자를 나타내는 기법
이스케이프 시퀀스




\로 시작하는 문자들은 특별한 의미
일반적인 의미에서 탈피한 특별한 의미
그래서 이스케이프 시퀀스(escape sequence)라고 부름
\는 이스케이프 문자(escape character)라고 부름
36
개행문자를 출력하는 Hello
실행결과:
Hello, World !
37
무료 C 개발환경

Gnu C 컴파일러를 기반으로 한 무료 개발환경이 있다.



Dev C++



GNU란?
 … GNU is not Unix.
 소프트웨어의 자유(free)를 외치는 개발자 모임
GCC: Gnu C Compiler? Gnu Compiler Collection!
BloodshedSoftware에서 개발한 무료 개발환경
http://www.bloodshed.net/
MinGW Developer Studio


Parinya Software에서 개발한 무료 개발환경
http://www.parinyasoft.com/
38
Key Point
39
Key Point 1






C 언어는 유닉스(Unix)라는 운영체제를 만들기 위해 개발되었다.
C 언어의 설계 철학은 ‘간결성’이다.
C 컴파일러는 C 프로그램을 기계어로 번역하여 실행파일을 만들어
준다.
통합개발환경은 편집기, 컴파일러, 디버거 등을 모두 모아서 같은 윈
도우 내에서 사용할 수 있도록 한다.
Microsoft Visual C++ IDE를 이용하여 C 프로그램을 실행하려면, 프
로젝트 생성, 파일 추가, 프로그램 편집, 빌드, 실행 단계를 거쳐야 한
다.
표준 입출력 프로그램을 ‘콘솔 프로그램(console application)'이라고
부르기도 한다.
40
Key Point 2





MSVC IDE에서 컴파일 오류가 발생했을 때, 해당 오류를 더블클릭하
면 오류 발생 위치로 이동한다. 그러나 컴파일러가 정확한 오류 위치
를 추적하지 못할 수 있다.
Microsoft Visual C++ IDE에서 프로젝트는 실제로 컴퓨터의 폴더(디
렉터리) 내에 저장된다. 그리고 실행파일이 성공적으로 생성되면 실
행파일은 프로젝트 폴더 내의 Debug 폴더나 Release 폴더에 저장된
다.
C 언어는 두 가지 형태의 주석을 사용한다. 여러 행에 걸쳐질 수 있
는 /* ... */ 형태의 주석과 한 행 끝까지 주석으로 처리하는
// ... 형태의 주석이다.
프로그램을 편집할 때 공백문자와 빈 행을 이용하여 가로 여백과 세
로 여백을 적절히 맞추면 프로그램을 이해하는데 큰 도움이 된다.
전처리기는 컴파일러가 수행되기 전에 먼저 수행된다. C 프로그램에
서 전처리기 지시자는 #으로 시작한다. #include 지시자는 헤더파
일을 포함시키기 위해 사용된다.
41
Key Point 3







모든 C 프로그램에는 main 함수가 존재해야 하며 main의 리턴 타입
은 int여야 한다.
main의 리턴 값은 운영체제에 전달된다. 이는 해당 프로그램의 성공
적인 종료 여부를 나타낸다. main의 리턴 값이 0이면 성공적으로 종
료되었음을 의미하고, 그렇지 않으면 오류 코드를 나타낸다.
여러 목적 파일을 묶어 주거나 목적 파일과 라이브러리 파일을 묶어
주는 기능을 하는 프로그램을 링커라고 한다.
명령줄 환경에서는 편집기, 컴파일러, 디버거 등을 모두 개별적으로
이용한다.
함수의 리턴 타입을 생략하면 C 컴파일러는 리턴 타입을 int형이라
고 가정한다.
문자열 내부를 입력할 때 엔터 키를 누르면 안 된다. 개행문자를 표
시하려면 \n을 이용해야 한다.
이스케이프 시퀀스는 제어문자를 비제어문자로 나타내기 위한 방법
이다. C 언어에서 이스케이프 시퀀스는 \로 시작한다.
42
요약


간단한 C 프로그램은 main 하나로 구성되어 있음
표준 출력 함수




main은 항상 정수 값을 리턴함(오류가 없다면 0을 리턴)




표준 출력 함수를 사용하려면 <stdio.h>를 #include해야 함
puts: 개행문자를 끝에 넣어 줌
printf: 개행문자를 자동으로 넣어주지 않음
main의 리턴 타입은 int
리턴 타입이 생략되어도 int로 간주
컴파일러: C 프로그램을 기계어 프로그램으로 변환
개발환경


Microsoft Visual C/C++(MSVC) 소개
무료 개발환경: Dev C++, MinGW Developer Studio
43
프로그래밍 실습
44
▶ 프로그래밍 실습 1

여러분의 명함을 출력하는 프로그램을 작성하라. 명함은
7줄 이내로 작성하며 각 행은 30열 이내로 작성한다. 예
컨대 다음과 같이 작성할 수도 있겠다.
45
▶ 프로그래밍 실습 2

ASCII 아트라는 것이 있다. 문자열만 이용하여 그림을 그
리는 것을 뜻한다. 여러 다양한 형태의 ASCII 아트를 웹
에서 찾을 수 있다. 예컨대 다음 웹 페이지에도 ASCII 아
트가 소개되어 있다.
http://www.chris.com/ASCII/
http://www.ascii-art.de/ascii/
여러분이 좋아하는 ASCII 아트를 골라서
이를 출력하는 C 프로그램을 작성해 보자.
예컨대 다음과 같은 ASCII 아트를 선택할
수도 있겠다.
46