매크로(define)란?
-
여러 번 사용하게 될 상수를 문자로 표현하여 변경 시에도 편리하게 사용할 수 있도록 하는 것
-
매크로 상수는 컴파일 전에 전처리기에 의해서 숫자로 치환됩니다.
#define [이름] [숫자]
-
매크로 사용 예시
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 20
int main(void)
{
int* arr = (int*)malloc(sizeof(int) * MAX_LEN);
int i;
for(i = 0; i < MAX_LEN; i++)
{
arr[i] = i+1;
}
for(i = 0; i < MAX_LEN; i++)
{
if(i % 5 == 0) printf("\n");
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
-
매크로 방식이 아닌 기존 방식대로 정수를 넣어서 반복문을 사용할 경우
-
데이터의 양이 바뀌게 된다면 예를 들어 30으로 데이터의 양이 바뀌게 되면 모든 코드를 수정해야 한다.
-
하지만 매크로를 사용한 코드에서 맨 위의 매크로 하나만 바꾸어 주면 되기 때문에 사용하기 편해진다.
-
매크로(define) 함수
-
매크로를 이용하여 함수의 역활을 대신하는 것
-
파라미터를 받을 수 있으며, 반환할 수 있다.
#define [함수이름](인자, 인자) [계산]
-
ex) #define SUM(a,b) (a+b)
매크로 함수 예시
#include <stdio.h>
#define SUM(a,b) a+b
#define MUL(a,b) a*b
int Func_mul(int a, int b)
{
return a*b;
}
int main(void)
{
printf("%d\n", SUM(10,20));
printf("%d\n", MUL(10,20));
printf("%d\n", MUL(10+3, 20+2));
printf("%d\n", Func_mul(10+3, 20+2));
return 0;
}
-
첫번첫 번 째첫 번째 두 번째 매크로 함수는 정상적으로 동작합니다.
-
세 번째 매크로 함수와 네 번째 일반 함수 동작 결과가 다릅니다.
-
이유는 #define 매크로는 단순 치환을 해주기 때문입니다.
-
MUL(10+3, 20+2)는 전처리기에 의해 10+3 * 20 + 2로 계산이 되어 10+60+2 =72가 됩니다
-
inline(인라인)이란?
-
매크로 함수의 단점을 보완하고자 일반 함수의 성향을 빌려온 함수
-
컴파일러가 지능적으로 판단하여 인 라이닝을 하는 것과, 일반 함수처럼 동작
-
inline은 함수 호출처럼 스택으로 불리는 것이 아니라 치환되어 사용
-
함수 선언 시 inline을 앞에 붙여 준다.
사용 예시
inline int func_add(int a, int b) {return a*b}
#include <stdio.h>
#define MUL(a,b) ((a)*(b))
#define MAX(a,b) ((a)>(b)?(a):(b))
inline int func_mul(int a, int b)
{
return a*b;
}
inline int func_max(int a, int b)
{
return a>b?a:b;
}
int main(void){
printf("%d\n", MUL(10 + 3, 20 + 2)); //macro
printf("%d\n", func_mul(10 + 3, 20 + 2)); //inline
printf("%d\n", MAX(10, 20));
printf("%d\n", func_max(10, 20));
printf("%d\n", MAX(10 + 3, 20 + 2));
printf("%d\n", func_max(10 + 3, 20 + 2));
return 0;
}
'study > C언어' 카테고리의 다른 글
포인터 배열과 배열 포인터에 대한 이해 (0) | 2020.06.29 |
---|---|
동적 할당 정리(malloc, realloc, calloc, free 함수) (0) | 2020.06.29 |
WIN API [GetVolumeInformation() 함수] (0) | 2020.04.08 |
구조체 정리 (0) | 2020.04.02 |
[c언어] 입출력 정리 (0) | 2020.04.02 |