?
? ????? PHP ??? ???? ??? ?? ??
在頭文件<complex.h>中定義 | ||
---|---|---|
#define I / *未指定* / | (自C99以來) |
I宏擴展為_Complex_I或_Imaginary_I。 如果實現(xiàn)不支持虛構(gòu)類型,則宏總是展開為_Complex_I。
一個程序可能未定義,也許然后重新定義宏I
。
這個宏不是名字i,它是數(shù)學(xué)中虛構(gòu)單元的名稱,因為我的名字已經(jīng)在許多C程序中使用過了,例如, 作為循環(huán)計數(shù)器變量。
宏 I 經(jīng)常被用來形成復(fù)數(shù),其表達式如x + y * I。 如果將I定義為_Complex_I,那么即使當(dāng)y為-0.0時,這樣的表達式也可以創(chuàng)建一個具有虛構(gòu)分量+0.0的值,這對于具有分支削減的復(fù)數(shù)函數(shù)很重要。 宏CMPLX提供了精確構(gòu)建復(fù)數(shù)的方法。
GCC提供了一個不可移植的擴展,允許用整數(shù)文字后綴i指定虛數(shù)常量:1.0fi,1.0i和1.0li是GNU C中的虛數(shù)單元。類似的方法是標(biāo)準(zhǔn)C ++的一部分,如C + +14(1.0if,1.0i和1.0il是C ++中的虛數(shù)單元)。
#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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.3.1 / 6 I(p:188)
G.6 / 1 I(p:537)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.3.1 / 4 I(p:170)
G.6 / 1 I(p:472)
_Imaginary_I(C99) | 虛數(shù)單位常數(shù)i(宏常數(shù)) |
---|---|
_Complex_I(C99) | 復(fù)數(shù)單位常數(shù)i(宏常數(shù)) |
CMPLXCMPLXFCMPLXL(C11)(C11)(C11) | 從實部和虛部構(gòu)建一個復(fù)數(shù)(函數(shù)宏) |
| 運算符“”i 的C ++文檔 |