티스토리 뷰

반응형

몇글자 빼고는 모두 똑같은 코드인데, 문자열이나 함수명등에 일부 글자만 변경해서 여러개의 코드를 만드는 매크로

예) 입출력 포트 함수와 변수를 10개씩 만들어야하는데, 일일이 다 작성하기 너무 귀찮고 많음.

 

#include <stdio.h>

// 매크로를 통해 여러 개의 코드를 생성하는 예제
#define GENERATE_CODE_WITH_NUMBER(NUM) \
    void myFunction##NUM() { \
        printf("This is function number %d\n", NUM); \
    } \
    char myString##NUM[] = "This is string number " #NUM;

// 특정 숫자에 대해 코드 생성
GENERATE_CODE_WITH_NUMBER(1)
GENERATE_CODE_WITH_NUMBER(2)
GENERATE_CODE_WITH_NUMBER(3)

int main() {
    // 생성된 함수와 문자열 사용 예시
    myFunction1();
    printf("%s\n", myString2);
    myFunction3();

    return 0;
}

 

 

 

 

 

C언어 매크로 장단점

매크로는 C 및 C++ 언어에서 강력한 코드 생성 기능을 제공하지만, 사용에 따라 장단점이 있습니다. 

 

매크로의 장점

1. 코드 생성 및 재사용
   - 매크로를 사용하면 반복적인 코드를 간단하게 생성할 수 있습니다.
   - 코드를 템플릿화하여 비슷한 구조의 코드를 반복 사용할 수 있습니다.

2. 컴파일 타임 코드 생성
   - 매크로는 컴파일 타임에 코드를 생성하므로 실행 시간 비용이 거의 없습니다.
   - 성능에 민감한 부분에서 유용할 수 있습니다.

3. 코드 실행시간이 빨라질 수 있음
   - 코드를 생성하고 확장하여 런타임보다 컴파일 타임에 작업을 수행할 수 있습니다.

   - 매크로를 잘 사용하여 함수호출을 줄이면, 프로그램코드도 작고, 실행속도가 매우 빨라질 수 있습니다.

 

4. 프로그램 코드 크기 감소

   - 매크로를 잘 사용하여 함수호출을 줄이면, 프로그램코드가 작고, 실행속도도 매우 빨라질 수 있습니다.

 

5. 사용안하는 불필요한 코드가 생성되지 않음

   - 매크로는 실제 코드에 추가가 되어야만 실행코드가 생성됩니다.

     매크로를 많이 만들어놓아도, 실제 코드에서 사용하지 않는다면, 매크로로 작성된 코드는 실행코드에 포함되지 않습니다.
   - 따라서, 함수 라이브러리를 사용하는것보다도 매크로 라이브러리를 사용하면, 실행코드 크기가 작아질 수 있습니다.


매크로의 단점

1. 가독성과 유지 보수성 저하
   - 매크로는 코드를 생성하는 특성상 가독성이 떨어질 수 있습니다.
   - 매크로가 남발되면 코드의 의도를 파악하기 어려워질 수 있으며 유지 보수가 어려워집니다.

2. 디버깅의 어려움
   - 매크로를 사용한 코드는 실제로 생성된 코드와 다르게 보일 수 있어 디버깅이 어려울 수 있습니다.
   - 매크로 확장을 통해 생성된 코드를 쉽게 이해하기 어려울 수 있습니다.

3. 오용의 가능성
   - 매크로는 강력한 도구이지만 오용될 경우 코드의 복잡성을 높일 수 있습니다.
   - 올바르게 사용하지 않으면 예기치 않은 동작을 일으킬 수 있습니다.

4. 네임 스페이스 충돌
   - 매크로에서 생성된 이름이 기존에 사용되는 심볼과 충돌할 수 있습니다.
   - 충돌을 피하기 위해 네임 스페이스를 충분히 고려해야 합니다.

5. 플랫폼 의존성
   - 특정 매크로나 매크로 확장 기능은 컴파일러나 플랫폼에 의존적일 수 있습니다.
   - 이로 인해 이식성이 낮아질 수 있습니다.

 

6. 프로그램 코드 크기 증가

   - 매크로를 남발하면 프로그램코드가 매우 커질 수 도 있습니다.

매크로는 강력한 기능을 제공하지만 적절하게 사용하지 않으면 코드의 가독성과 유지 보수성이 저하될 수 있습니다. 상황에 따라 매크로보다는 인라인 함수, 템플릿, 람다 등을 사용하는 것이 더 좋은 선택일 수 있습니다.

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함