1 / 13

CHAPTER 06. 매크로

CHAPTER 06. 매크로. 전처리기의 기능에 대해 이해한다 . 전처리기 지시자들의 특징과 사용법을 익힌다 . 매크 로 상수 , 매크로 함수 조건에 따라 선택적으로 코드를 포함하는 방법을 배운다 . 매크로를 정의하고 매크로 연산자를 이용하여 프로그램을 작성한다. 6.0 개요 p.232. 전처리기 (preprocessor) 소스 프로그램을 컴파일 하기 전에 수행되는 프로그램 전처리기 지시자 전처리기에게 내리는 지시자 : ‘ #’ 으로 시작. 6.1 #define 지시자 p.232.

beau-hull
Download Presentation

CHAPTER 06. 매크로

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHAPTER 06. 매크로 전처리기의 기능에 대해 이해한다. 전처리기 지시자들의 특징과 사용법을 익힌다. 매크로 상수, 매크로 함수 조건에 따라 선택적으로 코드를 포함하는 방법을 배운다. 매크로를 정의하고 매크로 연산자를 이용하여 프로그램을 작성한다.

  2. 6.0 개요 p.232 • 전처리기(preprocessor) • 소스프로그램을 컴파일하기전에 수행되는 프로그램 • 전처리기지시자 • 전처리기에게내리는 지시자: ‘#’으로 시작

  3. 6.1 #define 지시자 p.232 • #define 지시자 • 지정한 기호 상수를 프로그래머가 정의한 치환 문자열로 대체 • 매크로 상수 • 인수 없이 단순히 치환만 함 • 매크로 함수 • 8장에서 소개하는 함수처럼 인수를 가짐

  4. 6.1.1 매크로 상수 p.233 • 예) • #define MAX 100 • #define NUM MAX-1 • 예) • #define PI 3.1415 • area = PI * r * r; • 예) • #define MSG "잘못된 입력입니다." • if (i<0) printf(MSG); • 예) • #define PRT printf • PRT("Hello!"); 공백이 있으면 안됨 대문자 사용이 관례

  5. 6.1.1 매크로 상수 p.234 • 매크로 상수의 장점 • 프로그램 가독성 증가, 프로그램 수정 용이, 프로그램의 단순화 • 예) 100을 1000으로 변경하려면? 매크로 상수 사용시 매크로 정의만 수정하면 됨 // 매크로 사용 않은 경우 for (i=1; i<=100; i++) : avg= sum / 100; • // 매크로 사용 경우 • #define MAX 100 • for (i=1; i<=MAX; i++) • : • avg = sum / MAX; 책 수정

  6. 6.1.1 매크로 상수 p.234 • 예) 정수 1(논리값 참에 해당) 보다는 TRUE라는 단어가 이해하기 쉬움 • // 매크로 사용 않은 경우 • if(leapyear == 1) • printf(“윤년”); • while(1) • { • … • } • // 매크로 사용 경우 • #defineTRUE 1 • if(leapyear == TRUE) • printf(“윤년”); • while(TRUE) • { • … • }

  7. 6-1 매크로 상수 정의하기 p.234 비트 연산자 &, |, ^, ~ 대신 AND, OR, XOR, NOT을 사용하기 1 #include <stdio.h> 2 #define AND & 3 #define OR | 4 #define XOR ^ 5 #define NOT ~ 6 7 int main() 8 { 9 int x = 5, y = 6; 10 11 printf("x & y = %d \n", x AND y); 12 printf("x | y = %d \n", x OR y); 13 printf("x ^ y = %d \n", x XOR y); 14 printf("~x = %d \n", NOT x); 15 16 return 0; 17 }

  8. 6.1.2 매크로 함수 p.235 • 매크로 함수 • 8장의 함수처럼 인수를 가짐 • 매크로 함수 호출 자리를 정의된 함수 내용으로 대치함이 때 매크로 함수의 인수가 치환 내용 해당 자리로 매핑되어 대치됨 • 8장의함수보다 속도가 빠름 연산자 우선순위 문제로 잘못된 결과가 발생할 수 있으므로 인수마다 ( )로 묶어줘야 안전함

  9. 6.1.2 매크로 함수 p.235 • 예) SQUARE1과 SQUARE2의 비교 #define SQUARE1(x) x * x #define SQUARE2(x) ((x) * (x)) result1 = SQUARE1(2 + 3); // 잘못된 결과를 얻음 result2 = SQUARE2(2 + 3);

  10. 6-2 매크로 함수 정의하기 p.236 반지름을 입력받아 원의 둘레, 넓이 구하기 1 #include <stdio.h> 2 #define PI 3.141592 3 #define CIRCUM(r) (2 * PI * (r)) 4 #define AREA(r) (PI * (r) * (r)) 5 6 int main() 7 { 8 int radius; 9 10 printf("원의 반지름 radius(cm)의 값은? "); 11 scanf("%d", &radius); 12 printf("원의 둘레는 %.2f(cm)이고\n", CIRCUM(radius)); 13 printf("원의 넓이는 %.2f(cm2)입니다.\n", AREA(radius)); 14 15 return 0; 16 }

  11. 6.2 #include 지시자 p.237 • #include 지시자 • 특정 파일을 현재 파일에 포함하기 위해 사용 • 특히 함수의 원형이 있는 헤더 파일 포함에 사용

  12. p. 239

  13. 사용자의헤더 파일(ch6-3.h)을 [프로그램 6-4]에서 참조하는 예 p.239 [프로그램 6-3] 사용자가 직접 작성한 헤더 파일 • 1 #define NAME "홍길동" • 2 #define AGE 20 • [프로그램 6-4] • 1 #include <stdio.h> • 2 #include "ch6-3.h" • 3 • 4 int main() • 5 { • 6 printf("내 이름은 %s이고, 나이는 %d세입니다.\n", NAME, AGE); • 7 • 8 return 0; • 9 }

More Related