Initialization of complex types (C11)

When the C11 complex initialization feature is enabled, you can initialize C99 complex types with a value of the form x + yi, where x and y can be any floating point value, including Inf or NaN.

The C11 complex initialization feature can be enabled by the -qlanglvl=extc1x group option.

To enable the initialization of these complex types, macros CMPLX, CMPLXF, and CMPLXL are defined inside the standard header file complex.h for C11 compilation, which act as if the following functions are used.

float complex CMPLXF( float x, float y );
double complex CMPLX( double x, double y );
long double complex CMPLXL( long double x, long double y );

Note: These macros might infringe upon user namespaces. You must avoid using the macro names for other purposes.

These macros are available only if the C language header file complex.h is included, and they result in values that are suitable for static initialization if arguments are suitable for static initialization.

The following example shows how to initialize a complex type with a value of the form x + yi.
// a.c
#include <stdio.h>
#include <complex.h>

double _Complex a = CMPLX(5.0, 1.0/0);

int main(void) {
  double _Complex c = CMPLX(5.0, 1.0/0);
  printf("Value: %e + %e * I\n", __real__(a), __imag__(a));
  printf("Value: %e + %e * I\n", __real__(c), __imag__(c));
}

You can specify the following command to compile this program:

xlc -qlanglvl=extc1x a.c 
The result of running the program is:
Value: 5 + Inf * I
Value: 5 + Inf * I