# _Complex_I

< c‎ | numeric‎ | complex

定义于头文件 `<complex.h>` |  |
#define _Complex_I /* unspecified */ |  | (C99 起)

`_Complex_I` 宏展开成类型 const float _Complex 的值，其值为虚数单位。

### 注意

可在 I 非法时，譬如程序已取消定义它时使用此宏。

不同于 _Imaginary_I 及 CMPLX 不同，用此宏构造复数会失去虚数组分的零的符号位。

### 示例

    #include <stdio.h>
    #include <complex.h>

    #undef I
    #define J _Complex_I // 可用于重定义 I

    int main(void)
    {
        // 可用于构建复数
        double complex z = 1.0 + 2.0 * _Complex_I;
        printf("1.0 + 2.0 * _Complex_I = %.1f%+.1fi\n", creal(z), cimag(z));

        // 零的符号不会被保留
        double complex z2 = 0.0 + -0.0 * _Complex_I;
        printf("0.0 + -0.0 * _Complex_I = %.1f%+.1fi\n", creal(z2), cimag(z2));
    }

可能的输出：

    1.0 + 2.0 * _Complex_I = 1.0+2.0i
    0.0 + -0.0 * _Complex_I = 0.0+0.0i

### 引用

- C11 标准（ISO/IEC 9899:2011）：

  - 7.3.1/4 _Complex_I (p: 188)

- C99 标准（ISO/IEC 9899:1999）：

  - 7.3.1/2 _Complex_I (p: 170)

### 参阅

_Imaginary_I (C99) | 虚数单位常量 i (宏常量)
I (C99) | 复数或虚数单位常量 i (宏常量)