命名空间
变体
操作

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

I 展开为 _Complex_I_Imaginary_I。如果实现不支持虚数类型,则宏始终展开为 _Complex_I

程序可以取消定义并可能重新定义宏 I

内容

[编辑] 注意

宏没有命名为 i,它是数学中虚数单位的名称,因为名称 i 已经在许多 C 程序中使用,例如作为循环计数器变量。

I 通常用于构成复数,使用表达式如 x + y*I。如果 I 被定义为 _Complex_I,则此类表达式可能会创建虚部为 +0.0 的值,即使 y-0.0,这对具有分支切割的复数函数来说很重要。宏 CMPLX 提供了一种精确构造复数的方法。

GCC 提供了一个非便携式扩展,允许使用整数文字的后缀 i 指定虚数常量:1.0fi1.0i1.0li 在 GNU C 中是虚数单位。类似的方法是标准 C++ 的一部分,自 C++14 开始(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;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-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 标准 (ISO/IEC 9899:2011)
  • 7.3.1/6 I (p: 188)
  • G.6/1 I (p: 537)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.3.1/4 I (p: 170)
  • G.6/1 I (p: 472)

[编辑] 另请参阅

虚数单位常数 i
(宏常量) [编辑]
复数单位常数 i
(宏常量) [编辑]
(C11)(C11)(C11)
从实部和虚部构造复数
(函数宏) [编辑]
C++ 文档 for operator""i