티스토리 뷰
몇글자 빼고는 모두 똑같은 코드인데, 문자열이나 함수명등에 일부 글자만 변경해서 여러개의 코드를 만드는 매크로
예) 입출력 포트 함수와 변수를 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. 프로그램 코드 크기 증가
- 매크로를 남발하면 프로그램코드가 매우 커질 수 도 있습니다.
매크로는 강력한 기능을 제공하지만 적절하게 사용하지 않으면 코드의 가독성과 유지 보수성이 저하될 수 있습니다. 상황에 따라 매크로보다는 인라인 함수, 템플릿, 람다 등을 사용하는 것이 더 좋은 선택일 수 있습니다.
'C언어' 카테고리의 다른 글
uSD, USB 쓰기 속도 (0) | 2024.03.02 |
---|---|
우분투에서 open()함수와 fopen()함수의 성능차이, 메모리 사용량은 얼마나 차이가 있나? (1) | 2024.02.24 |
우분투-리눅스-open 함수 (0) | 2024.02.17 |
C언어 책을 만들다가 느낀것... (0) | 2023.08.08 |
STM32 Cube IED 에서 왼쪽 프로젝트 탐색 창 보이기 메뉴 (0) | 2023.04.30 |