Next: The Void Type, Previous: Floating-Point Data Types, Up: Primitive Types [Contents][Index]

Complex numbers can include both a real part and an imaginary part.
The numeric constants covered above have real-numbered values. An
imaginary-valued constant is an ordinary real-valued constant followed
by ‘`i`’.

To declare numeric variables as complex, use the `_Complex`

keyword.^{4} The
standard C complex data types are floating point,

_Complex float foo; _Complex double bar; _Complex long double quux;

but GNU C supports integer complex types as well.

Since `_Complex`

is a keyword just like `float`

and
`double`

and `long`

, the keywords can appear in any order,
but the order shown above seems most logical.

GNU C supports constants for complex values; for instance, ```
4.0 +
3.0i
```

has the value 4 + 3i as type `_Complex double`

.
See Imaginary Constants.

To pull the real and imaginary parts of the number back out, GNU C
provides the keywords `__real__`

and `__imag__`

:

_Complex double foo = 4.0 + 3.0i; double a = __real__ foo; /*`a`

is now 4.0. */ double b = __imag__ foo; /*`b`

is now 3.0. */

Standard C does not include these keywords, and instead relies on
functions defined in `complex.h`

for accessing the real and
imaginary parts of a complex number: `crealf`

, `creal`

, and
`creall`

extract the real part of a float, double, or long double
complex number, respectively; `cimagf`

, `cimag`

, and
`cimagl`

extract the imaginary part.

GNU C also defines ‘`~`’ as an operator for complex conjugation,
which means negating the imaginary part of a complex number:

```
_Complex double foo = 4.0 + 3.0i;
_Complex double bar = ~foo; /*
````bar`

is now 4 - 3i. */

For standard C compatibility, you can use the appropriate library
function: `conjf`

, `conj`

, or `confl`

.

For compatibility with older versions of GNU C, the
keyword `__complex__`

is also allowed. Going forward, however,
use the new `_Complex`

keyword as defined in ISO C11.

Next: The Void Type, Previous: Floating-Point Data Types, Up: Primitive Types [Contents][Index]