I
I
在头文件 | | |
---|---|---|
#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):
扩展内容
_Imaginary_I(C99) | 虚数单位常数i(宏常数) |
---|---|
_Complex_I(C99) | 复数单位常数i(宏常数) |
CMPLXCMPLXFCMPLXL(C11)(C11)(C11) | 从实部和虚部构建一个复数(函数宏) |
| 运算符“”i 的C ++文档 |