제 4장 전처리기와 매크로 Hello!! C 언어 강성호 김학배 최우영.

Slides:



Advertisements
Similar presentations
기본 자료형 순천향대학교 정보기술공학부 이 상 정. 자료형의 선언 컴퓨터프로그래밍 1 순천향대학교 정보기술공학부 이 상 정 3 자료형 선언 기본 자료형문자형 char 정수형 int 실수형 float double 형없음 void.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
8. 객체와 클래스 (기본).
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
C언어: 배열 (Arrays).
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
-Part3- 제5장 전처리기와 파일 분할 컴파일
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
변수와 자료형.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
제15장 전처리 및 비트연산.
쉽게 풀어쓴 C언어 Express 제15장 전처리 및 비트 필드 C Express.
21장. 문자와 문자열 처리 함수.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
변수와 자료형.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
제 3 장 상수와 변수
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
제 11 장 전처리기.
Derived Types-- Enumerated, Structure and Union
adopted from KNK C Programming : A Modern Approach
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
Chapter 2 Lexical Elements, Operators, and the C System
Chapter 10 함수 기본.
제13장 전처리 및 기타기능.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
Chapter 10 Strings and Pointers
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
쉽게 풀어쓴 C언어 Express 제15장 전처리 및 비트연산 C Express Slide 1 (of 29)
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
프로그래밍 기초와 실습 Chapter 11 Recursion.
조 병 규 Software Quality Lab. 한국교통대학교
4장 자료형.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 26. 매크로와 선행처리기.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
제10장 전처리기 문봉근.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
볼링 지도 – 학습 과정안.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
printf("Global Korea\n");
예수꼴 예배찬양 부모, 친구 초청 추수감사예배 - 11월 19일 -.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
Presentation transcript:

제 4장 전처리기와 매크로 Hello!! C 언어 강성호 김학배 최우영

순서 전처리기 #include문과 #define문 매크로 매크로와 헤더 파일 typedef문과 enum문 조건부 컴파일 제 4장 전처리기와 매크로 전처리기 #include문과 #define문 매크로 매크로와 헤더 파일 typedef문과 enum문 조건부 컴파일 이미 정의된 매크로 상수 기타 전처리문 매크로와 typedef를 이용한 예제 : 주사위놀이 요약

전처리기 전처리기(preprocessor)는 말 그대로 우선 처리되어야 하는 부분을 먼저 처리한다는 것 제 4장 전처리기와 매크로 전처리기(preprocessor)는 말 그대로 우선 처리되어야 하는 부분을 먼저 처리한다는 것 원시 코드를 컴파일러에 넘기기 전에 우선 전처리기가 소스 코드를 읽고 전처리기에 해당하는 명령을 먼저 모두 수행하여 새로운 소스 코드를 만드는 것을 의미 전처리기가 주로 수행하는 내용은 변수의 문자열로의 치환, 파일의 포함, 매크로(macro) 함수의 사용, 분할 컴파일 등으로 요약됨 전처리기에서 사용되는 지시어는 모두 앞에 # 기호를 사용

전처리기(계속) ANSI C에서 사용되는 전처리문 파일포함 : #include 문자열 또는 매크로 정의 : #define 제 4장 전처리기와 매크로 ANSI C에서 사용되는 전처리문 파일포함 : #include 문자열 또는 매크로 정의 : #define 매크로 해제 : #undef 조건부 컴파일 : #if #elif #else #ifdef #ifndef #endif 행번호 제어 : #line 컴파일 제어 : #error #pragma

#include문과 #define문 #include 문 #include 문의 사용 형식 제 4장 전처리기와 매크로 #include 문 #include 문의 사용 형식 #include <파일 이름> #include "파일 이름" #include 문에 의해 포함되는 대부분의 파일은 확장자가 ".h"인 헤더(header) 파일 헤더 파일들의 내용은 #define 문을 사용한 문자상수나 매크로 함수, 그리고 C에서 기본으로 제공하는 표준 함수들의 함수 원형(prototype) " " 표시를 사용하여 파일을 포함하는 경우는 현재 작업 중인 디렉토리에서 입력된 파일 이름을 찾게되고 < > 표시를 사용하는 경우에는 이미 설정되어 있는 include 디렉토리에서 해당 파일 이름을 찾아 포함

#include문과 #define문 #define 문 [예제 4-3] 제 4장 전처리기와 매크로 #define 문 [예제 4-3] #define MAX2INT 32767 /* 최대 2바이트 정수값 */ #define MAX4INT 2147483647 /* 최대 4바이트 정수값 */ #define EOF (-1) /* 파일 끝, End Of File */ #define EQ == /* 논리연산자 ==의 대체 */ #define NOTEQ != /* 논리연산자 !=의 대체 */ [예제 4-4] #include <stdio.h> #define STRING "This is an example string used in chapter 2.” void main(void) { printf(STRING); printf("\n"); } [실행 결과] This is an example string used in chapter 2.

매크로 식별자와 ( ) 사이는 공간을 두지 말고 붙여 써야 함 매크로 함수는 #define 문을 사용하여 함수를 구성함 제 4장 전처리기와 매크로 식별자와 ( ) 사이는 공간을 두지 말고 붙여 써야 함 매크로 함수는 #define 문을 사용하여 함수를 구성함 [예제 4-5] #include <stdio.h> #define ODD(a) (a%2 == 0) ? 0 : 1 void main(void) { if(ODD(4)) printf("It is odd.\n"); else printf("It is even.\n"); } [실행결과] It is even.

매크로 [예제 4-6] #include <stdio.h> 제 4장 전처리기와 매크로 [예제 4-6] #include <stdio.h> #define ODD(a) ((a)%2 == 0) ? 0 : 1 void main(void) { if(ODD(4)) printf(”It is odd.\n"); else printf(”It is even.\n"); } [실행결과] It is even. 하나의 매크로 함수는 다른 매크로 함수를 만들기 위하여 사용 가능 [예제 4-7] #define MAX(x, y) (((x) > (y)) ? (x) : (y) #define MAX4(a,b,c,d) MAX(MAX(a,b), MAX(c,d)) # 연산자는 매크로의 정의에서 인자를 사용하여 문자열을 만드는데 유용하게 사용

매크로 [예제 4-9] #include <stdio.h> 제 4장 전처리기와 매크로 [예제 4-9] #include <stdio.h> #define hi_msg(a, b) printf("Hi, " #a " and " #b ", Have a nice day.\n") int main(void){ hi_msg(Eunkyo, Jiho); return 0; } [실행결과] Hi, Eunkyo and Jiho, Have a nice day. /* stdio.h 파일이 이 위치에 포함된다. */ int main(void) { printf("Hi, " "Inpyo" " and " "Jiho" ", Have a nice day.\n");

매크로 제 4장 전처리기와 매크로 공백으로 분리된 문자 상수는 연결됨 printf("Hi, Inpyo and Jiho, Have a nice day.\n"); 전처리기 연산자 ##는 변수 표현 방식을 자유롭게 하기 위해 사용되는데 두 개의 문자를 합치는 기능

매크로 [예제 4-10] #include <stdio.h> #define X(i) ## i 제 4장 전처리기와 매크로 [예제 4-10] #include <stdio.h> #define X(i) ## i int main(void) { int x1=1, x2=2, x3=3; printf("x1=%d, x2=%d, x3=%d \n", x1, x2, x3); printf("x1=%d, x2=%d, x3=%d \n", X(1), X(2), X(3)); return 0; } [실행결과] x1=1, x2=2, x3=3

매크로와 헤더 파일 매크로 함수의 예 [예제 4-11] #define getchar() getc(stdin) 제 4장 전처리기와 매크로 매크로 함수의 예 [예제 4-11] #define getchar() getc(stdin) #define putchar(x) putc((x), stdout) 표준 라이브러리에서 제공하는 매크로를 사용하기 위해서는 해당 헤더 파일을 #include 문을 사용하여 포함해야 함 많이 사용하는 매크로 함수나 문자 상수를 별도의 헤더 파일에 저장하여 사용하는 것이 편리한 경우가 많음 헤더 파일에는 함수의 원형도 선언하고 구조체도 선언할 수 있으므로 자신이 하고자 하는 프로그램에 맞게 헤더 파일을 구성하여 사용하면 보다 효과적인 프로그램이 수행 가능

매크로와 헤더 파일 [예제 4-12] #include <stdio.h> #include <ctype.h> 제 4장 전처리기와 매크로 [예제 4-12] #include <stdio.h> #include <ctype.h> #define EOS '\0’ #define EQ == #define NOTEQ != #define ISPSIGN(x) ((x) EQ '+') ? 1 : 0 #define ISMSIGN(x) ((x) EQ '-') ? 1 : 0

매크로와 헤더 파일 [예제 4-13] [실행결과] Result = -2 #include "myheader.h” 제 4장 전처리기와 매크로 [예제 4-13] [실행결과] Result = -2 #include "myheader.h” void main(void) { int result; result = function("1 + 2 - 3 + 4"); printf("Result = %d \n", result); } int function(char s[]) { int i, num ; int result = 0, sign = 1; for (i=0; s[i] != EOS; i++) { if (isdigit(s[i])) { num = ((s[i] - '0' + 1) < 9) ? s[i] - '0' + 1 : 0 ; result += sign * num ; } else if (IS_PLUS_SIGN(s[i])) sign=-1 ; else if (IS_MINUS_SIGN(s[i])) sign=1; } return result ; }

Typedef문과 enum문 typedef 문 제 4장 전처리기와 매크로 typedef 문 데이터형을 사용자가 알아보기 쉽게 하기 위해 다른 식별자를 사용할 수 있도록 하는 기능 typedef 문의 선언 형식 typedef 데이터형 식별자1, 식별자2, …… ; [예제 4-14] typedef unsigned char byte; typedef int array[100]; typedef int *INT_PTR; byte c; /* unsigned char c와 같음 */ array i; /* int i[100]과 같음 */ INT_PTR x; /* int *x와 같음 */

Typedef문과 enum문 제 4장 전처리기와 매크로 typedef 문을 사용한 캐스트 연산자의 정의

Typedef문과 enum문 제 4장 전처리기와 매크로 enum 문 enum 문은 열거형 상수의 데이터형을 정의하여 선언할 수 있도록 하기 위해서 데이터형을 정의하기 위해 사용 열거형 상수의 의미 enum 문의 선언 형식

Typedef문과 enum문 enum 문 [예제 4-15] #include <stdio.h> 제 4장 전처리기와 매크로 enum 문 [예제 4-15] #include <stdio.h> int main(void) { enum {one,two,three,four,five} sum, multi ; sum = one + two + three + four + five ; multi = one * two * three * four * five ; printf("Result of summation : %d \n", sum) ; printf("Result of multiplication : %d. \n", multi); return 0; } [실행결과] Result of summation : 10 Result of multiplication : 0

Typedef문과 enum문 [예제 4-16] #include <stdio.h> int main(void) { 제 4장 전처리기와 매크로 [예제 4-16] #include <stdio.h> int main(void) { enum { one=1, two, three, four, five} sum, multi ; sum = one + two + three + four + five ; multi = one * two * three * four * five ; printf("Result of summation : %d \n", sum) ; printf("Result of multiplication : %d. \n", multi); return 0; } [실행결과] Result of summation : 15 Result of multiplication : 120 [예제 4-17] enum {apple = 3, pear , lemon, banana = 8, pineapple = 8} fruits ;

Typedef문과 enum문 제 4장 전처리기와 매크로 C 컴파일러는 enum 문의 열거형 상수를 선언된 함수 안에서만 인식할 수 있으므로 다른 함수에서는 같은 열거형 함수를 사용할 수 없음 [예제 4-18] int main(void) { enum arith sum ;/* sum의 데이터형을 열거형 상수로 선언 */ sum = one+two+three+four+five ; printf("Result of summation : %d \n", sum) ; printf("Result of Multiplication : %d. \n", multiply() ); return 0; } enum arith multiply( void ){ enum arith multi; /* 열거형 상수로 선언 */ multi = one * two * three * four * five ; return multi ;

Typedef문과 enum문 제 4장 전처리기와 매크로 typedef 문을 이용한 enum 문의 선언

Typedef문과 enum문 [예제 4-19] #include <stdio.h> 제 4장 전처리기와 매크로 [예제 4-19] #include <stdio.h> typedef enum { one=1,two,three,four,five } arith ; arith multiply(void); /* multiply의 데이터형을 열거형상수로 선언 */ int main(void){ arith sum ; /* sum의 데이터형을 열거형 상수로 선언 */ sum = one + two + three + four + five ; printf("Result of summation : %d \n", sum) ; printf("Result of Multiplication : %d. \n", multiply() ); return 0; } arith multiply( void ) { arith multi ; /* 변수 multi를 열거형 상수로 선언 */ multi = one * two * three * four * five ; return multi ;

조건부 컴파일 제 4장 전처리기와 매크로 조건부컴파일(conditionalcompilation)은 프로그램 개발 과정에서 사용되거나 프로그램의 이식성을 높여 서로 다른 형태의 컴퓨터에서도 동작할 수 있도록 하기 위해서 사용 조건부 컴파일에 사용되는 지시어 사용법 #if 문의 사용 형식 #ifdef 문의 사용 형식

조건부 컴파일 제 4장 전처리기와 매크로 조건부 컴파일에 사용되는 지시어 사용법 #ifndef 문의 사용 형식

조건부 컴파일 #if 문의 사용 형식에서 전처리기에 문자상수는 sizeof나 캐스트 연산자를 사용할 수 없음 제 4장 전처리기와 매크로 #if 문의 사용 형식에서 전처리기에 문자상수는 sizeof나 캐스트 연산자를 사용할 수 없음 defined 지시어 Defined 문자열 또는 defined(문자열) #if defined(문자열) [예제 4-20] #define DEBUG 1 #if DEBUG /* 디버깅을 위한 프로그램 루틴 */ #endif #define DEBUG #ifdef DEBUG /* 디버깅을 위한 함수들을 선언 */ #endif /* 프로그램 옵션으로 디버깅을 하려면 DEBUG를 1로 아니면 0으로 */ #if DEBUG /* 디버깅을 위한 루틴 */

조건부 컴파일 [예제] #ifdef 문자열1 ① /* 문자열1이 정의되어 있으면 ① 컴파일 */ #elif 문자열2 제 4장 전처리기와 매크로 [예제] #ifdef 문자열1 ① /* 문자열1이 정의되어 있으면 ① 컴파일 */ #elif 문자열2 ② /* 문자열1이 정의되어 있지 않고 문자열 2가 정의되어 있으면 ② 컴파일 */ #elif 문자열3 ③ /* 문자열1과 문자열2 모두 정의 되지 않고 문자열 3이 정의되어 있으면 ③ 컴파일 */ #else ④ /* 문자열1, 문자열2, 문자열3 모두 정의되어 있지 않으면 ④ 컴파일 */ #endif

조건부 컴파일 [예제 4-22] #if defined(__STDC__) || defined(SUN) 제 4장 전처리기와 매크로 [예제 4-22] #if defined(__STDC__) || defined(SUN) #include <string.h> #else #include <strings.h>

이미 정의된 매크로 상수 이미 정의된 매크로는 앞뒤에 각각 두 개씩의 밑줄을 사용 ANSI C에서 미리 정의된 매크로 상수 제 4장 전처리기와 매크로 이미 정의된 매크로는 앞뒤에 각각 두 개씩의 밑줄을 사용 ANSI C에서 미리 정의된 매크로 상수

기타 전처리문 #error #error 문의 사용법 #error 오류메세지 오류메세지는 " "를 사용하지 않아도 됨 제 4장 전처리기와 매크로 #error #error 문의 사용법 #error 오류메세지 오류메세지는 " "를 사용하지 않아도 됨 전처리기는 #error 문을 만나면 즉시 컴파일을 중단하고 현재 컴파일하고 있던 파일 이름, #error 문이 사용된 행번호, 그리고 #error 문과 오류메세지를 화면에 출력 출력 형식 파일 이름 : 줄 수 : #error 오류메시지

기타 전처리문 제 4장 전처리기와 매크로 #progma #progma 전처리기 지시어는 컴파일 경고 메시지와 관련된 컴파일 옵션을 원시 코드에서 제어할 수 있도록 함 컴파일을 하게 되면 여러 종류의 경고 메시지를 볼 수 있는데 이들이 표시되거나 표시되지 않도록 제어할 수 있음 #line #line 문은 앞 절에서 배운 이니 정의된 매크로 상수 __LINE__과 __FILE__를 변경하고자 할 경우에 사용 사용형식 #line 정수 "파일 이름" 정수는 원하는 행번호로 변경하기 위해서 사용하는 것으로 #line 문이 쓰인 다음 줄부터 입력된 행번호로 변경 파일이름은 생략 가능

기타 전처리문 #line [예제 4-23] #include <stdio.h> void main(void) { 제 4장 전처리기와 매크로 #line [예제 4-23] #include <stdio.h> void main(void) { printf("line number : %d, file name : %s \n", __LINE__, __FILE__); #line 100 "main.c" printf("line number : %d, file name : %s \n", __LINE__, __FILE__); } [실행결과] line number : 4, file name : 4-23.c line number : 101, file name : main.c

기타 전처리문 #undef #undef는 이미 전에 정의된 매크로 함수나 문자 상수의 정의를 해제하기 위해서 사용 제 4장 전처리기와 매크로 #undef #undef는 이미 전에 정의된 매크로 함수나 문자 상수의 정의를 해제하기 위해서 사용 사용 방법은 #define 문에 의해 정의된 식별자를 #undef 뒤에 넣어주면 됨

매크로와 typedef를 이용한 예제 주사위놀이 규칙 컴퓨터와 사람이 주사위를 던져 많은 수의 값이 나온 사람이 이기는 게임 제 4장 전처리기와 매크로 주사위놀이 규칙 컴퓨터와 사람이 주사위를 던져 많은 수의 값이 나온 사람이 이기는 게임 주사위는 사면체로 1에서 4까지의 숫자를 가짐