C 参考手册

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

I 宏展开成 _Complex_I_Imaginary_I 。若实现不支持虚数类型,则该宏始终展开成 _Complex_I

一个程序可以取消定义,并能在紧随其后重定义宏 I

注意

该宏名字不是 i ,虽然这是数学上的虚数单位名称。因为 i 已经用于大量 C 程序中,例如作为循环变量。

I 常用于组成复数,通过如 x + y*I 的表达式。 若 I 被定义成 _Complex_I ,则该表达式在 y-0.0 时创建虚部为 +0.0 的值,这对拥有分支的复变函数有显著影响。宏 CMPLX 提供精确构造复数的方法。

GCC 提供了一种不可移植的扩展,它允许通过在实数字面量后指定后缀 i1.0fi1.0i1.0li 是 GNU C 中的虚数单位。 C++14 起,类似的方式是标准 C++ 的一部分( 1.0if1.0i1.0il 是 C++ 中的虚数单位)。

示例

#include <stdio.h>
#include <complex.h>
 
int main(void)
{
    printf("I = %.1f%+.1fi\n", creal(I), cimag(I));
 
    double complex z1 = I * I;     // 虚数单位平方
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z = 1.0 + 2.0*I; // 在 C11 前组成复数的通常途径
    printf("z = %.1f%+.1fi\n", creal(z), cimag(z));
}

输出:

I = 0.0+1.0i
I * I = -1.0+0.0i
z = 1.0+2.0i

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.3.1/6 I (p: 188)
  • G.6/1 I (p: 537)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.3.1/4 I (p: 170)
  • G.6/1 I (p: 472)

参阅

虚数单位常量 i
(宏常量)
复数单位常量i
(宏常量)
(C11)(C11)(C11)
由实部和虚部构建复数
(宏函数)