©
本文档使用 PHP中文网手册 发布
在头文件<complex.h>中定义 | ||
---|---|---|
#define I / *未指定* / | (自C99以来) |
I宏扩展为_Complex_I或_Imaginary_I。 如果实现不支持虚构类型,则宏总是展开为_Complex_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 ++的一部分,如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
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)
_Imaginary_I(C99) | 虚数单位常数i(宏常数) |
---|---|
_Complex_I(C99) | 复数单位常数i(宏常数) |
CMPLXCMPLXFCMPLXL(C11)(C11)(C11) | 从实部和虚部构建一个复数(函数宏) |
| 运算符“”i 的C ++文档 |