C

[C]매크로에대해 알아보자

개발블로거 2020. 11. 7. 00:13

[C]매크로에대해 알아보자

 

매크로는 객체형과 함수형으로 나뉘는데 먼저 객체형부터 알아보자. 매크로의 이름은 일반적으로 대문자로 쓰는것이 좋은데 그 이유는 다른 식별자와 구분이 용이하도록 하게 하기 위해서이다.매크로를 선언할 때 주의할 점은 매크로 선언 문장 끝에 세미콜론은 쓰지 않는다는 점을 기억해서 나중에 삽질하는 일이 없도록 하자.

 

#으로 시작하는 문장을 전처리기라고 한다. 그 의미는 컴파일을 하기 전에 미리 점검하여 컴파일 옵션을 지정할 수 있다는 의미인데 #include는 미리 컴파일된 라이브러리를 포함하는 것이고 #define은 매크로를 설정하고 그것을 컴파일할 때에 적용한다. 그 외에도 할수 있는게 몇가지 있다.

 

#include<stdio.h>
#define PI 3.141592

int main()
{

	double radius;
    printf("원의 반지름 입력: ");
    scanf("%lf",&radius);
    printf("원의 넓이 : %f\n",radius*radius*PI);
}

위의 예시는 매크로를 이용해서 PI를 선언하고 이용해 보는 예시이다.이런 예시뿐만 아니라 On Off등 숫자보단 문자로 표현하는 것이 편한것들은 매크로로 정의할 경우 편하다.또한 매크로를 이용하여 간단함 함수를 만들수도 있다.

#include<stdio.h>
#define prin(x)printf("%d",x)
int main()
{
	int a = 1;
    
    prin(a);
    
    }

 

그냥 함수를 쓰는것이 더 간단하지만 이렇게 사용하는 것도 가능하다는 것을 표현하기 위해서 만들어 보았다.

 

조건부 매크로는 매크로의 선언 여부를 판단하여 새로 지정하거나 기존의 매크로를 없앨때 사용할 수 있다.

 

분류 매크로 기능
조건부 컴파일 #if/#endf 매크로의 값에 따라 컴파일 방식이 달라진다.
#ifdef/#endif 매크로가 정의되어 있는지 아닌지에 따라 컴파일 여부가 결정된다.
#undef 미리 정의된 매크로를 없앤다.
#ifndef/#endif 매크로가 정의되어 있지 않다면 정의한다.
표준 매크로 __DATE__ 프로그램이 실행되는 날짜를 문자열로 표현
__FILE__ 프로그램의 이름과 디렉터리를 문자열로 표현
__LINE__ 프로그램 내에서 행 번호룰 정수로 표현
__STDC__ C컴파일러가 표준인지 아닌지 나타냄 표준이라면 1 아니면 다른 값이 나타남
__TIME 프로그램이 실행될 때의 시스템 시간을 문자열로 표현

 

 

이렇게 많은 종류의 조건부 매크로가 있다 다음 포스팅에서는 조건부 매크로의 사용방법에 대해 자세하게 알아보겠다.