I
来自 cppreference.com
定义在头文件 <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.0fi
、1.0i
和 1.0li
在 GNU C 中是虚数单位。类似的方法是标准 C++ 的一部分,自 C++14 开始(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; // 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