68
20162학기 고급컴퓨터프로그래밍및실습 (36342-02) 13장 고급 기능 1

Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

2016년2학기 고급컴퓨터프로그래밍및실습 (36342-02)

제13장 고급 기능

1

Page 2: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

목차

전처리기

매크로 상수와 매크로 함수

조건부 컴파일

분할 컴파일

#include

헤더 파일과 소스 파일

헤더 파일의 중복 문제

헤더 파일과 소스 파일의 구성

main 함수의 매개변수

main 함수의 원형, 매개 변수

2

Page 3: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

전처리기 (preprocessor)

컴파일러가 소스 파일을 컴파일하기 전에 수행되는 프로그램으로, 프로그

래머가 작성한 소스 파일이 컴파일될 수 있도록 준비한다.

3

Page 4: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

전처리기 문장

전처리기 문장 기능

#define 매크로를 정의한다.

#include 헤더 파일을 포함한다.

#if, #else, #elif, #endif 조건에 따라 컴파일한다.

#ifdef 매크로가 정의된 경우에 컴파일한다.

#ifndef 매크로가 정의되지 않은 경우에 컴파일한다.

4

Page 5: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 상수 (1/2)

#define 으로 시작되는

전처리 문장

전처리기는 소스 파일에서

매크로 상수가 사용된 곳을

모두 찾아서 정의된

문자열로 대치한다.

5

정의

대치

대치

Page 6: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 상수(2/2)

정수형 상수, 실수형 상수나 문자열 상수도 매크로 상수로 정의할 수 있으며, 함수명이나 데이터형도 매크로 상수로 정의할 수 있다.

6

Page 7: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 (1/4)

매크로 함수는 함수처럼 인자를 갖는 매크로이다.

매크로 상수처럼 매크로 함수가 사용되는 곳에 문자열 대치를 통해 코드를확장한다.

7

Page 8: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 (2/4)

전처리기는 프로그램에서 매크로

함수가 사용된 곳을 만나면 ( ) 안에

있는 문자열을 매크로 함수의 인자

에 매핑해서, 문자열 대치를 한다.

8

Page 9: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 (3/4)

매크로 함수는 함수인 것처럼 보이지만 사실은 함수가 아니다.

컴파일시에 인자의 데이터형 검사를 수행하지 않으며, 인자를 매개변수로

전달하는 함수 호출 과정이 수행되지 않는다.

매크로 함수 사용 시 문자열 대치 과정에서 잘못된 결과가 만들어질 수도

있다.

9

Page 10: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 (4/4) : 일반 함수와의 차이10

Page 11: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수를 정의하고 사용하는 예 (1/2)11

타입 체크?

Page 12: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 사용 시 주의사항 (1/2)

일반 함수는 먼저 인자의 값을 계산한 다음에 함수가 호출된다.

매크로 함수는 문자열 대치로 처리되므로 인자 값을 먼저 계산하지 않는다.

매크로 함수의 인자를 사용할 때 ( )로 묶어주는 것이 좋다.

매크로 함수의 인자로 증감연산자를 이용한 연산식을 사용하지 않도록

주의해야 한다.

12

Page 13: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로 함수 사용 시 주의사항 (2/2)

매크로 함수는 인자의 데이터형을 검사하지 않는다.

여러 줄로 된 매크로함수를 정의하려면 각 라인의 맨 끝에 (back slash, \)을 써주어야 한다.

13

Page 14: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

조건부 컴파일

특정 조건이 만족할 때만 코드 블록을 컴파일한다.

상황에 따라서 특정 코드 블록을

컴파일하게 또는

컴파일하지 않게 만들 수 있다.

이식성 있는 코드를 개발할 때 유용하다.

14

Page 15: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#if 와 #endif 예제

다음 예제를 보자. debugging 할 때만 변수 값들을 출력해 본다.

15

실행결과

Page 16: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#if ~ #endif

#if의 조건식에는 매크로를 정수와 비교하는 관계 연산자가 주로 사용되고,

산술 연산자, 논리 연산자 등이 사용될 수 있다.

16

Page 17: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#if ~ #else ~ #endif

#if의 조건식에서 매크로를 실수나 문자열과 비교할 수 없다.

#if에는 반드시 짝이 되는 #endif가 필요하며, #else를 함께 사용할수도 있다.

17

Page 18: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#if ~ #elif ~ #else ~ #endif

#if ~ #endif 에서는 컴파일할 문장이 여러 개여도 { }로 묶어줄 필요가 없다.

#if 안에 다른 #if를 중첩해서 사용할 수 있으며, 각각의 #if마다 #endif가 하

나씩 짝을 이루어야 한다.

18

Page 19: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#ifdef (1/3)

“if defined”라는 의미이다.

#ifdef는 특정 매크로의 정의 여부에 따라 #ifdef와 #endif 사이의 문장을

컴파일할지 결정한다.

19

Page 20: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#ifdef (2/3)

DEBUG 매크로가 정의될 때만 함수 호출 정보를 출력한다.

위의 출력문이 수행되려면 DEBUG 매크로가 정의되어야 한다.

20

Page 21: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#ifdef (3/3)21

Page 22: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#ifdef를 이용한 디버깅 정보 출력22

실행결과

Page 23: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#ifndef

“if not defined”라는 의미이다.

#ifndef 다음의 매크로가 정의되지 않은 경우에만 #ifndef와#endif 사이의 문장이 컴파일된다.

#ifdef나 #ifdef에서 사용되는 매크로 심볼의 정의

#define을 이용하거나 C 컴파일러의 컴파일러 스위치를 이용

23

Page 24: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

분할 컴파일

분할 컴파일의 필요성

작성해야 할 코드의 양이 많거나 여러 사람이 공동 개발을 해야 하는경우에는 소스 파일을 여러 개로 나누어서 프로그램을 개발해야 한다.

관련된 함수나 변수들끼리 한 파일로 모아서 작성한다.

관련된 코드를 한 곳에 모아두면 유지 보수하기가 쉬워진다.

헤더 파일

서로 다른 소스 파일 사이에서 필요한 정보를 공유할 수 있게 해준다.

파일 확장자로 .h를 사용한다.

소스 파일에 정의된 함수나 전역 변수를 사용하는 데 필요한 정보를제공한다.

소스 파일에 헤더 파일을 포함하려면 #include를 이용한다.

24

Page 25: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일과 소스 파일25

Page 26: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#include 문 (1/2)

헤더 파일은 전처리기 문장인 #include에 의해서 소스 파일 안에 포함된 후컴파일된다.

전처리기는 #include가 지정한 헤더 파일의 내용을 #include가 사용된 위치로 복사해 넣어준다.

26

Page 27: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

#include 문 (2/2)

#include <라이브러리 헤더>

헤더 파일을 C 컴파일러의 포함 경로(include path)에서 찾는다.

포함 경로는 컴파일러가 제공하는 표준 라이브러리의 헤더 파일이 모여있는 디렉터리이다.

#include “사용자 정의 헤더”

헤더 파일을 소스 파일이 있는 디렉터리에서 찾는다.

27

Page 28: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일의 경로명

< >나 “ ” 안에 헤더 파일의 완전 경로명이나 상대 경로명을 지정할

수도 있다.

28

Page 29: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (1/6)

C 컴파일러는 각각의 소스 파일마다 독립적으로 컴파일을 수행한다.

함수 호출 시 함수의 선언이나 정의가 없으면 컴파일 경고가 발생한다.

29

Page 30: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (2/6)

다른 파일에 정의된 함수를 호출하려면 함수의 선언이 필요하다.

30

Page 31: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (3/6)

소스 파일이 여러 개면 소스 파일마다 함수의 선언이 필요하다.

31

Page 32: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (4/6)

헤더 파일을 이용하면 함수 선언을 한 곳에 모아둘 수 있다.

32

Page 33: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (5/6)

소스 파일의 이름을 따서 헤더 파일을 만든다.

Array.c에 정의된 함수들을 다른 소스 파일에서 호출할 수 있게 하려면 먼저Array.c의 이름을 따서 Array.h를 만든다.

헤더 파일에 함수의 선언을 넣어준다.

함수를 호출하려면 소스 파일마다 헤더 파일을 포함한다.

Array.c에 정의된 함수를 호출하려고 하는 소스 파일마다 #include를 이용해서 Array.h을 포함한다.

특정 소스 파일에 대한 헤더 파일을 만들고 나면, 소스 파일에도 자기 자신의

헤더 파일을 포함해주는 것이 좋다.

Array.c에도 Array.h를 포함해준다.

소스 파일은 각각 독립적으로 컴파일되므로, 라이브러리 헤더는 라이브러리를

사용하는 소스 파일마다 각각 포함해주어야 한다.

입출력 라이브러리를 사용하는 소스 파일마다 <stdio.h>를 포함해야 한다.

33

Page 34: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 (6/6)34

Page 35: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 예 (1/4)35

함수의 선언

라이브러리 헤더 파일 포함

자신의 헤더 파일 포함

Page 36: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 예 (2/4)36

Page 37: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 예 (3/4)37

Page 38: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 파일에 정의된 함수의 호출 예 (4/4)38

Page 39: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

매크로, 구조체, typedef의 공유

매크로나 구조체, typedef는 소스 파일마다 정의가 필요하므로 이들의 정

의를 헤더 파일에 넣어준다.

39

Page 40: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

여러 소스 파일에서 공유되는 매크로나구조체, typedef의 정의

① 매크로, 구조체, typedef의 정의는 소스 파일마다 필요하므로 헤더 파일에

넣어준다.

② 헤더 파일에 구조체나 typedef를 사용하는 함수 선언이 들어갈 때는, 구조

체나 typedef 정의 다음에 함수 선언을 넣어준다.

③ 매크로, 구조체, typedef를 사용하는 소스 파일마다 헤더 파일을 포함한다.

40

Page 41: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

여러 소스 파일에 사용되는 구조체의 정의 예(1/4)

41

구조체 point를 매개 변수로갖는 함수들의 정의

Page 42: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

여러 소스 파일에 사용되는 구조체의 정의 예(2/4)

42

사용자 정의 헤더 파일

Page 43: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

여러 소스 파일에 사용되는 구조체의 정의 예(3/4)

43

Page 44: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

여러 소스 파일에 사용되는 구조체의 정의 예(4/4)

44

실행결과

Page 45: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 소스 파일에 선언된 전역 변수의 사용(1/2)

다른 소스 파일에 선언된 전역 변수를 사용하려면 전역 변수의 extern 선언

을 헤더 파일에 넣어준다.

45

Page 46: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 소스 파일에 선언된 전역 변수의 사용(2/2)

① 전역 변수는 프로그램 전체에서 반드시 하나의 소스 파일에 선언한다. 즉,

하나의 소스 파일에서만 메모리가 할당되어야 한다.

② 전역 변수가 선언된 소스 파일의 헤더 파일에 전역 변수에 대한 extern 선

언을 넣어준다. 전역 변수의 extern 선언은 메모리를 할당하지 않고, 전역

변수의 데이터형과 변수명만 알려준다.

③ 전역 변수를 사용하려면 전역 변수의 extern 선언이 들어있는 헤더 파일

을 포함한다.

46

Page 47: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 소스 파일에 정의된 전역 변수의 사용 예(1/3)

47

Page 48: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 소스 파일에 정의된 전역 변수의 사용 예(2/3)

48

Page 49: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

다른 소스 파일에 정의된 전역 변수의 사용 예(3/3)

49

Page 50: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

소스 파일에 같은 헤더 파일이 여러 번 포함되서는 안된다.

50

Page 51: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일의 중복 피하기 (1/2)

헤더 파일의 시작과 끝에 #ifndef, #define, #endif를 넣어준다.

#ifndef나 #define에 헤더 파일의 포함 여부를 알려주는 매크로 심볼을 지정

한다.

보통 #ifndef와 #define 다음에 사용되는 매크로 심볼은 헤더 파일의 이름을

따서 만든다.

이 매크로 심볼의 정의 여부로 헤더 파일이 포함되었는지를 확인한다.

가능한 모든 헤더 파일에 #ifndef, #define, #endif를 넣어주는 것이 안전하다.

표준 C 라이브러리 헤더에도 이미 이 기능이 사용되고 있다.

51

Page 52: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일의 중복 피하기 (2/2)52

Page 53: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일의 중복 포함 막기53

Page 54: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

헤더 파일과 소스 파일의 구성54

Page 55: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

main 함수의 원형

main 함수의 원형

void main(void);

int main(void);

int main(int argc, char *argv[ ]);

명령행 인자(command-line argument)

main 함수로 전달되는 인자

명령행 인자는 프로그램을 실행할 때 지정한다.

55

Page 56: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

main( ) 의 파라미터56

Page 57: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

명령행 인자를 처리하기 위한 main 함수의 원형

argc : 명령행 인자의 개수

argv : 명령행 인자로 전달된 문자열의 배열

57

Page 58: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

C 프로그램의 실행 방법

방법 1

MS Visual C++ 2010 Express 창에서

솔루션을 빌드한 후, 디버깅하지 않고 시작을 누른다.

방법 2

솔루션을 빌드한 후,

그 솔루션 속에 있는 프로젝트 폴더 안에 실행 화일이 있다. 이를 직접 실행시킨다.

58

Page 59: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

프로그램 실행159

솔루션 속의 Debug 폴더

폴더 안의 화일들을 본다

바로 이 파일, 나의 실행 파일

내 프로그램 실행

내 프로그램 실행 결과

1

23

4

5

6

Page 60: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

프로그램 실행260

프로그램 실행할 때main( ) 에게 전달할파라미터 (아규먼트, 인자) 들

Page 61: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

프로그램 실행3

다음과 같이 프로젝트의 속성을 정하고 나서, [빌드]후 [디버깅하지 않고 시

작]을 누른다.

61

인수들을여기에

Page 62: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

Command Line Arguments 사용62

파일의 이름을 명령행에서받음

Page 63: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

Command Line Arguments 사용63

명령행에서 받은 두 인자 (문자열) 를 숫자로 변환한 후 더하여 출력하는

프로그램

Page 64: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

계산기 만들어 보기 (1/3)64

Page 65: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

계산기 만들어 보기 (2/3)65

Page 66: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

계산기 만들어 보기 (3/3)66

Page 67: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

학습정리 (1/2)

전처리기

매크로 함수 : 함수처럼 인자를 갖는 매크로이다. 함수에 비해서 처리 속도는 빠르지만 프로그램 크기가 커지는 단점이 있다.

#define SQUARE(n) ((n) * (n))

조건부 컴파일 : 조건이 만족할 때 특정 문장을 컴파일한다. #if, #elif, #ifdef, #ifndef 등이 있고, 각각은 #endif가 필요하다.

#ifdef DEBUG

printf("GetFactorial 호출\n");

#endif

67

Page 68: Ch 0. 프로그래밍 언어contents.kocw.net/KOCW/document/2016/ewha/kimmyeong/19-2.pdf · Array.c에정의된함수를호출하려고하는소스파일마다#include를이용해

학습정리 (2/2)

분할 컴파일

#include : 다른 파일의 내용을 소스 파일에 복사해서 넣어준다.

#include <라이브러리 헤더>

#include "사용자 정의 헤더"

헤더 파일과 소스 파일

main 함수의 매개변수

main 함수의 원형

int main(int argc, char *argv[ ]);

main 함수의 매개변수 : argc는 명령행 인자의 개수이고, argv는 명령행 인자 문자열의 배열이다.

68