자주 사용하는 매크로 알아보기

2024. 9. 22.·자료구조

malloc() 매크로

#define MALLOC(ptr, type, size) \
    do { \
        ptr = (type*)malloc((size) * (type)); \
        if (ptr == NULL) { \
            fprintf(stderr, "Insufficient memory"); \
            exit(EXIT_FAILURE); \
        } \
    } while(0)

MALLOC(ptr, sizeof(int), 10); 과 같이 사용

-------

SWAP(x, y, t) 매크로

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))

사용 예시

void sort(int list[], int n) { // 선택 정렬 알고리즘
	int i, j, min, temp;
    for(i = 0; i < n - 1; i++) {
		min = i; // 현재 최소값의 인덱스를 i로 초기화
        // i 이후의 값들 중 최소값을 찾음
        for(j = i + 1; j < n; j++) {
			if(list[j] < list[min]) 
            	min = j; // 더 작은 값이 있다면 그 인덱스를 min으로 변경
		}
        SWAP(list[i], list[min], temp); // 최소값을 현재 i 위치에 있는 값과 교환
}

-------

COMPARE(x, y) 매크로

#define COMPARE(x, y) (((x) < (y)) ? -1 : ((x) == (y) ? 0 : 1))

사용 예시

int binsearch(int list[], int searchnum, int left, int right) { // 이진 탐색 알고리즘
    int middle;

    // 이진 탐색이 끝날 때까지(left가 right보다 작거나 같을 동안)
    while (left <= right) {
        // 중간 인덱스 계산(left와 right의 중간 값)
        middle = (left + right) / 2;

        // list[middle]과 searchnum을 비교
        switch (COMPARE(list[middle], searchnum)) {
            // list[middle]이 searchnum보다 작은 경우, 
            // 찾고자 하는 값이 오른쪽에 있으므로 탐색 범위를 오른쪽으로 좁힘
            case -1: 
                left = middle + 1; 
                break;
            
            // list[middle]이 searchnum과 같은 경우, 값을 찾았으므로 인덱스를 반환
            case 0:  
                return middle;
            
            // list[middle]이 searchnum보다 큰 경우, 
            // 찾고자 하는 값이 왼쪽에 있으므로 탐색 범위를 왼쪽으로 좁힘
            case 1:  
                right = middle - 1; 
                break;
        }
    }

    // 값이 배열 내에 없는 경우, -1을 반환
    return -1;
}

-------

🤔: 저 근데 궁금한 게 있는데 매크로는 왜 사용하나요?

🐢: 매크로를 사용하면 먼저 코드 재사용성이 높아집니다. 반복되는 코드를 하나의 이름으로 정의해 재사용할 수 있고, 이에 따라 코드 가독성이 향상돼요! 또 특정 값이나 코드를 변경할 필요가 있다면 매크로 정의 부분만 수정하면 돼서 유지보수가 용이해집니다!

저작자표시 비영리 변경금지 (새창열림)

'자료구조' 카테고리의 다른 글

큐(Queue)  (0) 2025.01.16
스택(Stack)  (0) 2025.01.15
Stack 알아보기  (1) 2024.10.06
연결리스트(Linked List) 알아보기  (0) 2024.09.30
기본 정렬 알고리즘 알아보기  (0) 2024.09.27
'자료구조' 카테고리의 다른 글
  • 스택(Stack)
  • Stack 알아보기
  • 연결리스트(Linked List) 알아보기
  • 기본 정렬 알고리즘 알아보기
우는거북이
우는거북이
  • 우는거북이
    거북이는 울고 있다
    우는거북이
  • 전체
    오늘
    어제
    • 알아보기 (75) N
      • AI (4)
      • 언어 (16)
        • Python (15)
        • C언어 (1)
      • 알고리즘 (7)
      • 백준 (22)
      • 자료구조 (10)
      • 컴퓨터네트워크 (6)
      • 운영체제 (1)
      • 데이터통신 (9) N
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
우는거북이
자주 사용하는 매크로 알아보기
상단으로

티스토리툴바