매크로란 어떤 것을 대신하여 사용하는 이름을 말합니다. 즉, 어떤 특정한 값이나 처리 명령어를 하나의 이름을 부여하고 그 특정한 값이나 처리 명령어를 사용할 때 부여한 이름을 사용하여 대신 코딩하는 것을 말합니다. 이 이름은 선 처리분에서 우선적으로 처리되는데 선 처리 과정에서 매크로 이름 위치에 특정 값이나 명령어로 변환하게 됩니다. 설명이 글로 좀 애매하게 된 것 같은데 예를 들어 자세히 이야기 하도록 하겠습니다. 어떤 느낌인지 실제 코딩해보고 실행 결과를 눈으로 확인하는 것이 백마디 말보다 더 쉽게 이해 할 수 있겠죠.
그럼 매크로에 대해서 알아보도록 하죠.
매크로는 특정 값, 명령어, 함수 등을 하나의 이름으로 정의하는 것을 말합니다.
매크로 구조는 다음과 같습니다.
#define 매크로이름 명령어
예를 들면 아래와 같습니다.
#define TRUE 1
#define FALSE 0
if(val==TRUE){
printf("TRUE 입니다. \n");
}
이렇게 코딩이 되어 있다고 한다면 TRUE은 1을 나타냅니다. val값이 1이 되면 printf()문이 수행되고 1이 아니면 if문을 그냥 빠져 나옵니다.
이게 선 처리 과정에서
if(val==1){
printf("TRUE 입니다. \n");
}
이렇게 TRUE 라는 매크로 이름이 있는 위치에 1이 대입됩니다. 그리고 나서 컴파일이 진행되어 프로그램이 만들어 집니다.
여기서 중요한거는 1이라는 값을 TRUE라는 이름을 부여하여 1에 대한 의미를 갖는 이름을 작명 할 수 있습니다. 즉, 매크로라는 것은 어떤 특정한 값, 명령어, 함수들을 특정한 이름으로 만들어서 그 값, 명령어, 함수 등을 의미를 쉽게 코딩하는 가운데 식별할 수 있게 해주는 유용한 명령어 키워드 입니다.
이제 간단히 매크로를 이용한 프로그램을 만들어 볼까요.
[기본소스]
#include
int main(int argc, char *argv[]) {
printf("Hello World! \n");
return 0;
}
위 기본 소스는 "Hello World!"라는 문장을 콘솔창에 출력하는 간단한 출력문 프로그램입니다. 이 표현을 매크로로 한번 만들어 볼까요.
[수정소스]
#include
#define MAIN main(int argc, char *argv[])
#define BEGIN {
#define END }
#define OUTPUT printf
MAIN
BEGIN
OUTPUT("Hello World! \n");
END
이렇게 기본 표현들을 매크로 이름으로 정의해 놓고 코딩을 해 봤네요. 전혀 다른 코딩이 된 것 처럼 보이실 꺼에요. 나만의 C언어 코딩이 된 것처럼요. 저게 선처리과정에서 매크로 이름이 있는 위치에 원래명령어들이 다 대입됩니다. 그러면 실험 예시인 기본소스의 코딩처럼 변환이 되고 이 변환 된 코딩이 컴파일 과정을 통해 실행 프로그램이 만들어 집니다.
아무튼 저렇게 했을 때 정말로 정상적인 결과가 나온지 실행을 해보아야 겠죠.
[결과]
정상적인 결과가 이렇게 나왔네요. 매크로가 참 잼있는 명령어입니다. 사용하기에 따라 나만의 코딩을 할 수 있습니다.
매크로 표현들은 많은데 매크로 상수변수로 사용하는 경우가 많습니다. 과거에는 매크로 상수변수를 사용을 많이 했지만 요즘은 const 을 이용한 일반상수변수 표현을 많이 합니다.
#define A 10
const int A=10;
둘 다 같은 상수변수인데 중요한 것은 매크로 경우는 자료형 명시가 정확하지 않기 때문에 저정된 값을 무조건 대입하지만 const은 정확히 자료형의 크기에 맞게 값이 설정되어 있는지 체크하기 때문에 오류를 줄이기 위해 매크로보다는 const를 주로 사용합니다.
암튼 이렇게 매크로의 사용을 간단히 살펴보았습니다.