Presentation is loading. Please wait.

Presentation is loading. Please wait.

제10장 전처리기 문봉근.

Similar presentations


Presentation on theme: "제10장 전처리기 문봉근."— Presentation transcript:

1 제10장 전처리기 문봉근

2 제10장 전처리기 10.1 #include 10.2 #define 10.3 #undef
10.4 #if, #else, #elif, #endif 10.5 #ifdef, #ifndef 10.6 #error, #line

3 전처리기 명령어 전처리기는 원시코드가 컴파일되기 전에 C언어의 문법과는 독립적으로 실행시켜 매크로(macro) 문장이 있으면 정의된 문장으로 치환해주는 역할을 담당한다.

4 10.1 #include 예제 10.1 #include 사용 예 #include <stdio.h>
#include <conio.h> #include "my.h" #include "a:\max.h" void main(void) { ..... ...... }

5 예제 10.2 factorial 구하는 프로그램 // factorial.h #define ONE 1
int factorial(int n) { if (n > ONE) return(n*factorial(n-1)); else return(ONE); } // factorial.c #include <stdio.h> #include "factorial.h" void main(void) int num; scanf("%d", &num); printf("%d != %d",num,factorial(num)); 실행결과 3 3!= 6

6 10.2 #define 문법 (1) #define 매크로명 문자열 또는 상수

7 예제10.3 인수를 포함하지 않는 매크로 정의 프로그램 설명 #define MAX 20 #define TRUE 1
#define FALSE 0 #define PI #define BASE #define EOF 설명 프로그램내에 MAX라는 부분은 컴파일 하기 전에 20으로 전부 치환된다. 마찬가지 이유로, TRUE는 1, FALSE는 0, PI는 , BASE는 256, EOF는 -1 등으로 치환된다.

8 예제10.4 인수를 포함하는 매크로 정의 프로그램 설명
예제10.4 인수를 포함하는 매크로 정의 프로그램 #define MAX(x,y) ( ((x)>(y)) ? (x) : (y) ) #define ADD(a,b) ((a)+(b)) #define MUL(a,b) ((a) * (b)) #define PRINTD(dt) printf("%d\n",dt); 설명 프로그램내에 MAX(1st, 2nd)이와 같은 형태로 되어 있는 부분이 있다면 전처리기는 ( ((1st)>(2nd)) ? (1st) : (2nd) ) 으로 치환한다. 두 번째, ADD(1st, 2nd)와 같은 형태의 문장이 있다면 ( (1st) + (2nd) )로 치환한다. 세 번째와 네 번째도 마찬가지 방법으로 치환시킨다.

9 예제10.5 매크로 치환이 일어나지 않는 예 프로그램 실행결과 #include <stdio.h>
예제10.5 매크로 치환이 일어나지 않는 예 프로그램 #include <stdio.h> #define TRUE    1 #define  MAX(x,y)   ( ((x)>(y)) ? (x) : (y) ) void main(void) {        char str[] = "MAX(3,5)";        printf("%s, TRUE \n", str); } 실행결과 MAX(3, 5), TRUE

10 예제10.6 괄호를 사용하지 않아서 문제가 발생한 매크로 정의
#include <stdio.h> #define ADD(x) x+x void main(void) { int a, b = 4; a = ADD(b) / 2; printf("a = %d\n", a); } 실행결과 a = 6

11 예제10.7 괄호를 충분히 사용한 매크로 정의 #include <stdio.h>
#define ABS(x) ((x<0)? -(x):(x)) #define MAX(x,y) ((x<y)? y:x) #define MIN(a,b) ((a<b)? a:b) #define ADD(x) (x+10) void main(void) { int i = -10; float j = ; printf("%3d %f\n", ABS(i), ABS(j)); printf("%3d \n", (int)MAX(i,j)); printf("%3d \n", ADD(ABS(i))*2); } 실행결과 10 40

12 예제10.8 두 수를 입력받아 큰 수를 찾아내고 이 두 수를 이용하여 사칙연산을 수행하는 프로그램
#include <stdio.h>   #include <conio.h>   #define MAX(a,b)   (((a)>(b))?(a):(b))   #define MUL(a,b)   a*b   #define DIV(a,b)   a/b   #define ADD(a,b)   a+b   #define SUB(a,b)   a-b   #define PRINTD(dt) printf("%d\n",dt);      void main(void)   {          int a,b,mu,di,ad,su,max;          printf("input(a,b) :");          scanf("%d %d",&a,&b);          max = MAX(a,b);          mu  = MUL(a,b);          di   = DIV(a,b);          ad  = ADD(a,b);          su  = SUB(a,b);          PRINTD(max);           PRINTD(mu);          PRINTD(di);          PRINTD(ad);          PRINTD(su);          getch();   } 실행결과 input (a, b) : 12 4 12 48 3 16 8

13 10.3 #undef 프로그램내에서 정의된 매크로를 해제하기 원할 때가 있다. #undef는 이미 정의된 매크로 정의를 해제할 때 사용한다. 문법 #undef 매크로명

14 예제10.9 매크로로 선언한 부분을 #undef 로 해제하는 프로그램
#include <stdio.h> #include <conio.h> #define SIZE 100 #define PRINTD(dt) printf("%d\n",dt); void main(void) {        int a,b,c;        a=SIZE;        PRINTD(a); #define SIZE 200        b=SIZE;        PRINTD(b); #undef SIZE #define SIZE 300        c=SIZE;        PRINTD(c);        getch(); } 실행결과 100 200 300

15 10.4 #if, #else, #elif, #endif 문법 #if 조건식 1 블록 1; 조건식 1이 참일때
블록2 ; 조건식 1이 거짓이고 2가 참일때 #else 블록 3; 조건식 1,2가 거짓일 때 #endif 블록조건식의 끝을 나타내는 문장

16 예제 10.10 C 프로그램을 전처리기가 처리한 예로써 실행결과에 나온 프로그램을 컴파일러가 실행파일로 만들게 된다.
#define MIN 5 #define MAX 500 void main(void) {        int i, j, p;        i = 10;        j = 20;        p = 0;        while(p == 0){ #if MIN < 10                j = 1000; #else                j = 50; #endif                p++;        } #if MAX > 200        j = 5; } 실행결과 void main(void) {        int i, j, p;        i = 10;        j = 20;        p = 0;        while(p == 0){                j = 1000;                p++;        }        j = 5; }

17 예제 10.11 조건부 컴파일을 이용한 프로그램 #include <stdio.h>
#include <conio.h> #define TRUE  1 #define FALSE 2 #define EQUAL 3 #define CONDITION  TRUE #define EQ  == void main(void) { #if CONDITION EQ TRUE        printf(" CONDITION is TRUE\n"); #elif CONTION EQ FALSE        printf("CONDITION is FALSE\n"); #else        printf("CONDITION is EQUAL\n"); #endif        getch(); } 실행결과 CONDITION is TRUE

18 10.5 #ifdef, #ifndef #ifdef는 매크로가 지정되어 있는 경우에 수행하고

19 예제 10.12 매크로가 정의되었는지를 알아보는 프로그램
#include <stdio.h> #include <conio.h> #define MAX 100 void main(void) { #ifdef  MAX        printf("MAX = %d\n",MAX); #endif #ifdef   MIN        printf("%d\n",MIN); #else        printf("MIN is not defined !");        getch(); } 실행결과 MAX = 100 Min is not defined!

20 예제 10.13 조건부 컴파일을 이용한 프로그램 #define DEBUG #include <stdio.h>
void func(int a, int b) {        int c;        c=(a++)+(b++); #ifdef DEBUG        printf("i=%d, j=%d, c=%d\n",a,b,c); #endif } void main(void)        int i,j;        printf("i=%d, j=%d\n", i, j);        i=5; j=8;        func(i, j); 실행결과 I = , j = I = 6, j = 9, c = 13

21 10.6 #error, #line 문법 #error "메시지......"

22 예제 #error을 이용하는 예 #include <stdio.h> #include <conio.h> #define MAX 100 #define MIN 101 void main(void) { #if  MIN > MAX        #error "MIN > MAX" #endif }

23 10.6 #error, #line(계속) 문법 #line 줄번호 "파일명"
컴파일러에게 지시하는 명령어로 줄번호를 바꾸고 파일명도 바꿔서 출력하라는 지시이다.

24 예제 10.15 #line을 이용하는 예 #include <stdio.h>
#include <conio.h> #define MAX 100 #define MIN 101 void main(void) {        int a, b;        a = 5;        b = a*a;        a = int; #line 100 "error.c"        b = (a - 5;        printf("a = %d, b = %d \n", a, b); }


Download ppt "제10장 전처리기 문봉근."

Similar presentations


Ads by Google