Tipos complexos estão no idioma C desde o padrão C99 ( -std=c99opção do GCC). Alguns compiladores podem implementar tipos complexos, mesmo em modos mais antigos, mas essa é uma extensão não padrão e não portátil (por exemplo, IBM XL, GCC, pode ser intel, ...).
Você pode começar em http://en.wikipedia.org/wiki/Complex.h - fornece uma descrição das funções em complex.h
Este manual http://pubs.opengroup.org/onlinepubs/009604499/basedefs/complex.h.html também fornece algumas informações sobre macros.
Para declarar uma variável complexa, use
double _Complex a; // use c* functions without suffix
ou
float _Complex b; // use c*f functions - with f suffix
long double _Complex c; // use c*l functions - with l suffix
Para atribuir um valor ao complexo, use a _Complex_Imacro de complex.h:
float _Complex d = 2.0f + 2.0f*_Complex_I;
(na verdade, pode haver alguns problemas aqui com (0,-0i)números e NaNs na metade única do complexo)
O módulo é cabs(a)/ cabsl(c)/ cabsf(b); Parte real é creal(a), imaginário é cimag(a). carg(a)é para argumento complexo.
Para acessar diretamente (ler / escrever) uma parte imag real, você pode usar esta extensão GCC não portável :
__real__ a = 1.4;
__imag__ a = 2.0;
float b = __real__ a;