1 / 25

제 3 장 전처리기와 입출력 함수

제 3 장 전처리기와 입출력 함수. 전처리기 개요. 전처리기의 유래 pre-processor 에 의해서 생긴 말 pre( 전 - 앞 ), processor( 처리기 ) 컴파일러 앞에서 먼저 처리함 전처리기가 처리하는 내용 전처리 지시자를 처리 (# 으로 시작 ) #define , #include, #ifdef, #else, #endif, #ifndef, #if, #elif, #line, #error, #pragma 함수를 처리

Download Presentation

제 3 장 전처리기와 입출력 함수

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. 제 3 장 전처리기와 입출력 함수

  2. 전처리기 개요 • 전처리기의 유래 • pre-processor에 의해서 생긴 말 • pre(전-앞), processor(처리기) • 컴파일러 앞에서 먼저 처리함 • 전처리기가 처리하는 내용 • 전처리 지시자를 처리 (#으로 시작) #define , #include, #ifdef, #else, #endif, #ifndef, #if, #elif, #line, #error, #pragma • 함수를 처리 sqrt(), atan(), atan2(), exit(), atexit(), memcpy(), memmove(), va_start(), va_arg() … • 주석 제거

  3. 전처리 지시자의 종류 • #define • #include • #ifdef ~ #endif • #if defind(XXX) ~ #endif • #if !defined(XXX) ~ #endif • #undef

  4. #include • ‘이러 이러한 파일을 포함시켜라’의 의미를 가짐 • 예 제 • #include <stdio.h> -시스템 디렉토리에서 찾음 • #include “my_header.h” -현재의 디렉토리에서 찾음

  5. #define • #define • #include에 비해서 주의 사항이 많음 • ‘이러한 것을 다음부터 이렇게 사용하겠다’는 의미를 가짐 • #define에서 정의한 모든 것들은 전처리기가 지정한 문자열로 치환함 • 예제 • #define SIZE 1024 • 1024라는 수치 대신에 SIZE라는 문자열을 사용하겠다는 의미 • #define PIE 3.141592 • 3.141592라는 수치 대신에 PIE라는 문자열을 사용하겠다는 의미

  6. 매크로 변수 정의 • #define YEAR 2007 • #define TIME 60 • #define MIN 60 • #define TIME_VLUE TIME * MIN • #define PRINT printf(“%d\n”, TIME_VALUE) • #define PI 3.141519 • #define TRUE 1

  7. 주의사항 • 여러 라인에 걸쳐서 매크로를 정의할 수 없음 • #define MAX 100 * 200 * 300 • 매크로 변수에 공백을 삽입할 수 없음 • #define M AX 100 * 200 * 300 ( X ) • #define MAX 100 * 200 * 300 ( O )

  8. 매크로 함수 개념 • #define ADD(x, y) x + y #define : 매크로 지시자 ADD : 매크로 함수 명 (중간에 공백이 있으면 안됨) (x, y) : 매크로 함수 인자 x + y : 매크로 몸체 • 예제 • define MAX(x, y) (x > y) ? x : y

  9. 매크로 함수의 위험성 • 우선 순위에 의한 위험성(1/2) • 예제 #define MUL(x, y) x * y • printf(“%d\n”, MUL(4, 6)); • printf(“%d\n”, MUL(2+2, 3+3)); • 1번의 결과: 24 • 2번의 결과: 24가 아님. 2번은 다음과 같이 전개되어 결과값이 14가 됨 • printf(“%d\n”, 2 + 2 * 3 + 6); • 해결 방법 (괄호 사용) #define MUL(x, y) (x) * (y) printf(“%d\n”, MUL(2+2, 3+3));  printf(“%d\n”, (2 + 2) * (3 + 3));

  10. 매크로 함수의 위험성 • 우선 순위에 의한 위험성(2/2) • 예제 #define MUL(x, y) (x) * (y) • printf(“%d\n”, 300 / MUL(10, 10)); • printf(“%d\n”, 300 / (10) * (10)); • 해결 방법 (전체 괄호 사용) • #define MUL(x, y) ((x) * (y)) • printf(“%d\n”, 300 / MUL(10, 10));  printf(“%d\n”, 300 / ((10) * (10)));

  11. 전처리 지시자 • #ifdef … #endif • 조건부 컴파일 지시자 • 매크로 변수 정의 여부에 따라서 컴파일이 수행되거나 수행되지 않도록 함 • 조건적으로 컴파일 되기 때문에 범위가 필요함 (#endif로 처리) • 예제 #ifdef DEBUG … (프로그래머가 작성한 프로그램) … #endif • DEBUG가 매크로 정의되어 있다면 #endif까지 컴파일 되며 매크로 정의되어 있지 않다면 컴파일되지 않음

  12. 입출력 함수의 개요 • printf()/scanf() • 키보드 입력 및 출력 함수 • 파일 입력 및 출력 함수 • 입출력은 파일, 키보드, 화면, 테이프 드라이브 등을 뜻함 • 화면 입출력만 뜻하지 않음 (화면 입출력은 ‘표준 입출력함수’라고 함)

  13. printf() • printf() 란? • printf: print와 formatted의 합성어 • 표준 입출력 함수 • 문자, 숫자, 문자열, 부동형 숫자 등 다양하게 출력 가능 • 자동 개행을 해 주지 않음 • 자동개행함수:puts() • printf() –형식 • printf("서식 문자열", 인자1, 인자2, 인자3 …); • 서식 문자열은 항상 큰 따옴표를 사용함 • 서식 문자열에 따라서 인자가 있을 수도 있고 없을 수도 있음 • 서식 문자열 안에 변환형식문자가 존재하면 인자와 1:1 대응

  14. printf() • printf() –변환형식문자가 없는 경우 • printf("I'm archie."); printf("You are a girl."); • printf("I'm archie. You are a girl."); • printf("I'm archie.\nYou are a girl."); • printf("I'm archie.\n\n\nYou are a girl."); • printf("I'm archie.\tYou are a girl."); • I’m archie. You are a girl. • I’m archie. You are a girl. • I'm archie. You are a girl. • I’m archie. You are a girl. • I’m archie. You are a girl.

  15. printf() • 변환 형식 문자

  16. printf() • 서식 지정 문자 • 출력의 모양을 결정 • %[flags][width][.prec][F|N|h|l]type flags : '-', '+', ' ', '#' 등이 있으며 숫자에 음수기호나 주소를 표시하는 역할을 함 width : 출력의 폭을 지정 prec : 출력되는 값의 정밀도를 지정함.부동형에서 주로 많이 사용 F, N, h, l: 입력 크기 지정자 type : 변환형식문자를 지정

  17. printf() • flags - :문자와 숫자가 모두 왼쪽 맞춤. 숫자보다도 문자열 출력에 많이 쓰임 • flags + : 문자나 문자열인 경우는 사용할 일이 없으며 주로 숫자에서 부호를 같이 출력하고 싶을 때 사용 • flags # : 10진수보다는 16진수를 출력할 때 많이 사용하며 특히 포인터(주소)를 출력하기 위하여 사용됨. 출력되는 값이 주소라는 것을 명시하기 위하여 0x를 추가하는 경우가 많은데 이때 #을 추가하여 0x를 대신함 • width : 출력의 폭을 지정하는데, 출력되는 값보다 크게 잡으면 나머지는 공백으로 채워짐. • prec :소수점 이하의 정밀도를 지정할 때 사용함. 지정하지 않으면 소수점 이하 6자리까지 출력하며 ‘.f’를 사용하면 소수점 이하는 잘려나감.

  18. printf()

  19. scanf() • 표준 입력 함수 • scan과 formatted의 합성어 • 문자열 입력은 자제하는 것이 좋음 • 문자열 입력은 논리 에러를 유발하거나 사용법에 상당한 제약을 가져옴 • 문자열 입력은 fgets() 사용하는 것이 좋음

  20. scanf()

  21. scanf() • 주의사항 • 숫자(정수, 부동형 상수)를 입력 받을 때 '&' 기호를 잊지 말아야 함 • 문자 하나를 입력 받을 때에도 '&' 기호를 사용해야 함 • 문자열을 입력 받는데 사용하지 말아야 함

  22. scanf() • 숫자(정수, 부동형 상수)를 입력 받을 때 '&' 기호를 잊지 말아야 함

  23. scanf() • 문자 하나를 입력 받을 때에도 '&' 기호를 사용해야 함

  24. scanf() • 문자열을 입력 받는데 사용하지 말아야 함

More Related