来自cppreference.com
< c‎ | numeric‎ | complex
定义于头文件 <complex.h>
#define I /* unspecified */
(C99起)

I宏展开成_Complex_I_Imaginary_I。若实现不支持叙述类慈宁宫,则该宏会始终展开成{lc|_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
(宏常量) [edit]
复数单位常量i
(宏常量) [edit]
(C11)
(C11)
(C11)
由实部和虚部构建复数
(宏函数) [edit]
operator""iC++文档