complex 매크로(C99)
complex 매크로(C99)
C에서 복소수 타입을 쓰려면 _Complex라는 키워드를 써야 해요. 그런데 _Complex는 붙임줄로 시작해서 타이핑이 좀 불편하죠. 그래서 표준이 이 키워드를 대신 쓸 수 있는 편한 이름으로 complex 매크로를 제공해요.
출처: cppreference
본문
정의
<complex.h> 헤더에 이렇게 정의돼 있어요.
| 형태 |
|---|
#define complex _Complex |
동작 방식
이 매크로는 복소 타입을 나타내는 타입 지정자로 확장돼요. 즉 complex라고 쓰면 컴파일러에게 _Complex를 쓴 것과 같은 의미로 전달됩니다.
프로그램은 이 complex 매크로를 #undef로 풀고 다시 정의할 수도 있어요. 물론 그럴 일은 드물겠지만, 표준이 열어 둔 가능성이라는 점만 알아 두면 돼요.
예제
complex 매크로를 써서 복소수를 만들고 제곱을 계산해 보는 코드예요.
#include <complex.h>
#include <math.h>
#include <stdio.h>
void print_complex(const char* note, complex z)
{
printf("%s %f%+f*i\n", note, creal(z), cimag(z));
}
int main(void)
{
double complex z = -1.0 + 2.0*I;
print_complex("z =", z);
print_complex("z² =", z * z);
double complex z2 = ccos(2.0 * carg(z)) + csin(2.0 * carg(z))*I;
print_complex("z² =", cabs(z) * cabs(z) * z2);
}
출력:
z = -1.000000+2.000000*i
z² = -3.000000-4.000000*i
z² = -3.000000-4.000000*i
첫 줄은 입력값, 둘째 줄은 직접 곱한 z*z의 결과예요. 셋째 줄은 극형식으로 다시 조립한 값인데 둘째 줄과 똑같이 나오죠. 같은 복소수 제곱인데 두 경로 모두 같은 결과로 수렴하는 걸 확인할 수 있어요.
더 알아보기
imaginary매크로: 허수 타입을 나타내는 키워드 매크로.<complex.h>의 복소수 연산 함수들.