선행처리기란?
#define 함수
●#선행처리기 명령어 #define함수 용도: 1) 상수를 치환
2) 매크로 함수를 정의
Q)선행처리기(preprocessor)란?
--코드를 생성하는 것이 아니라, 컴파일러가 컴파일하기 좋도록 소스를 재구성해 주는 역할을 하는 것.
Q) 매크로(macro)란?
--프로그램 내에서 반복적으로 사용되는 단어 또는 수행할 문장을 특정한 심벌(symbol)을 사용해서 나타내는 것
-유의사항-
구분 | 설명 |
매크로 이름 | 1.보통 대문자를 사용 2.공백 문자가 나오기 직전까지의 문자열 |
매크로의 정의 | 1.매크로의 정의문에는 세미콜론(;)이 붙지 않는다 2.줄이 바뀌면 원/역슬래쉬(\)로 이어짐 표시 |
연산기능 | 1.연산 수행 X 2.치환만 수행 O |
제한 | 1.문자 상수 또는 문자열 상수 내에서의 매크로 전개 X |
●#define함수 사용법:
- 단순 치환: #define 매크로이름 치환리스트
- 매크로 정의: #define 매크로이름(매개변수) 매개변수포함문자열
#define함수 단순 치환 사용법
●단순 치환 코드예제
-FST_NUM부터 LST_NUM까지 홀수의 합 계산하기
#include <stdio.h>
#define FST_NUM 1
#define LST_NUM 100
int main() {
int cnt, hap = 0;
for (cnt = FST_NUM; cnt <= LST_NUM; cnt += 2) {
hap += cnt; //1+3+5+7 이런식으로 hap에 더해진다
}
printf("매크로 상수변환을 이용하여 %d부터 %d까지 홀수의 합을 계산하기\n", FST_NUM, LST_NUM);
printf("%d부터 %d까지 홀수의 합: %d", FST_NUM, LST_NUM, hap);
return 0;
}
*참고: #define 단순치환하는것(정의한 단어를 다른 값으로 정의하는 것)을 매크로 확장 이라고한다.
#define함수 매크로 함수 사용법
●매크로 함수 코드예제
-세제곱을 구하기
#include <stdio.h>
#define square(a) (a)*(a)*(a)
int main() {
int num;
printf("●매크로함수를 이용하여 세제곱을 구하는 프로그램\n");
printf("정수를 입력하세요: ");
scanf_s("%d", &num);
printf("%d의 세제곱: %d", num, square(num));
return 0;
}
매크로 함수는 단순 치환과 달리 "매개변수" 가 있다는 것이 중요하다.
●#define함수 취소와 재정의 하는법:
삭제방법: 코드 중간에 #undef 매크로이름
재정의하는법: 코드 중간에 #define 매크로이름 바꿀내용
●#define함수 취소 삭제/재정의 코드예제
#include <stdio.h>
#define square(a) (a)*(a)*(a)
int main() {
int num;
printf("●매크로함수를 이용하여 제곱을 구하는 프로그램\n");
printf("정수를 입력하세요: ");
scanf_s("%d", &num);
#undef square(a) //매크로 취소
#define square(a) (a)*(a) //매크로 재정의
printf("%d의 제곱: %d", num, square(num));
return 0;
}
위에 있는 코드와 비교해볼 것!!
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 13강 분기문 (break 문 , continue 문, return 문) (0) | 2020.11.02 |
---|---|
C언어 12강 사용자 정의 함수 (0) | 2020.11.01 |
C언어 10강+ 배열 응용: 배열의 최댓값구하기 알고리즘 (2) | 2020.10.31 |
C언어 10강 배열(array)/문자열(char 활용) (0) | 2020.10.31 |
C언어 9강 while문과 do-while 문 (0) | 2020.10.29 |