Namespaces
Variants

I

From cppreference.net
定义于头文件 <complex.h>
#define I /* 未指定 */
(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 提供了一个非可移植扩展,允许在整数字面量后添加后缀 i 来指定虚数常量: 1.0fi 1.0i 1.0li 在 GNU C 中表示虚数单位。类似的方法自 C++14 起已成为 C++ 标准的一部分( 1.0if 1.0i 1.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 标准 (ISO/IEC 9899:2011):
  • 7.3.1/6 I (页: 188)
  • G.6/1 I (页: 537)
  • C99 标准 (ISO/IEC 9899:1999):
  • 7.3.1/4 I (页: 170)
  • G.6/1 I (页: 472)

参见

虚数单位常量 i
(宏常量)
复数单位常量 i
(宏常量)
(C11) (C11) (C11)
根据实部和虚部构造复数
(函数宏)
C++ 文档 关于 operator""i