-
[C Language] 3. 매크로 함수(Macro function) - C 언어CSE/C Language 2015. 6. 13. 10:021. 간단한 매크로 함수 예제
#define ADD(x, y) x + y
#define: 매크로 지시자ADD : 매크로 함수명(중간에 공백이 있으면 안 됨)(x, y): 매크로 함수 인자x + y: 매크로 함수 몸체ADD()라는 매크로 함수의 인자(parameter)에 5와 7을 주면 전처리기는 ADD(5, 7)을 12라는 숫자로 바꾸어서 컴파일러에게 건네주는 것이 아니다.단지 치환을 시키는 것 뿐이다.다른 예로 두 수중 큰 수를 출력하는 예제를 보도록 하자.#define MAX(x, y) (x > y) ? x : y위 예제는 삼항 연산자로 x가 y보다 클 경우 x, 아니면 y를 반환한다.- 여러 예제#define MAX(x, y) (x > y) ? x : y#define PRINT(X) printf("Value of X is %d\n", X)#define MUL(x, y) x * y#define INDEX(vector) (vector - INT_BASE) / 4'#을 이용한 매크로 함수 정의'아래 예제를 살펴보자.123456789101112131415161718/** macrofunc.c** Created on: 2015. 5. 11.* Author: root*/#include <stdio.h>#define PSUB(x) printf("The value of (10 - x) is %d\n", 10 -x)int main(void) {PSUB(5);PSUB(7);return 0;}cs 예상 출력결과는 아래와 같다." The value of (10 - 5) is 5"" The value of (10 - 7) is 3"그러나 실 출력 결과는 아래와 같다." The value of (10 - x) is 5"" The value of (10 - x) is 3"PSUB(x)에서 x의 값은 5, 7 이고 printf()의 (10 - x)에서 x를 전처리기가 치환할 것으로 예상했으나,전혀 반응하지 않고 그대로 출력하였다.주석에서와 마찬가지로 printf()에서 사용된 매크로 인자는 치환되지 않고 출력된다.그러므로 매크로 함수에서 인자를 치환시키기 위해 '#' 연산자를 사용한다.기존 PSUB(x)와 PSUB2(x)를 비교해서 살펴보도록 하자.1234567891011121314151617181920212223/** macrofunc.c** Created on: 2015. 5. 11.* Author: root*/#include <stdio.h>#define PSUB(x) printf("The value of (10 - x) is %d\n", 10 -x)#define PSUB2(x) printf("The value of (10 - "#x") is %d\n", 10 -x)int main(void) {PSUB(5);PSUB(7);PSUB2(5);PSUB2(7);return 0;}cs * Programming in C 서적을 참고하여 작성하였습니다.
'CSE > C Language' 카테고리의 다른 글
[C Language] 7. 대입 연산자(Assign operator) - C 언어 (0) 2015.06.13 [C Language] 6. 연산자 개요(Introduction to operator) - C 언어 (0) 2015.06.13 [C Language] 5. 입출력 함수(I/O Function) - C 언어 (0) 2015.06.13 [C Language] 4. 내장 매크로(Nested Macro) - C 언어 (0) 2015.06.13 [C Language] 2. 매크로 변수(Macro Variable) - C 언어 (0) 2015.06.13 [C Language] 1. 전처리기(Pre-processor) - C 언어 (0) 2015.06.13