c코드에서 문자열과 함수명에 숫자가 들어 있는데, 이 숫자만 바꾸어서 여러개의 코드를 작성하는 매크로, C언어 매크로 장단점
몇글자 빼고는 모두 똑같은 코드인데, 문자열이나 함수명등에 일부 글자만 변경해서 여러개의 코드를 만드는 매크로
예) 입출력 포트 함수와 변수를 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. 프로그램 코드 크기 증가
- 매크로를 남발하면 프로그램코드가 매우 커질 수 도 있습니다.
매크로는 강력한 기능을 제공하지만 적절하게 사용하지 않으면 코드의 가독성과 유지 보수성이 저하될 수 있습니다. 상황에 따라 매크로보다는 인라인 함수, 템플릿, 람다 등을 사용하는 것이 더 좋은 선택일 수 있습니다.