In Pascal, complex numbers are most conveniently handled via a record. In C, "double complex" is a datatype from the C library <complex.h> and consists of a real and an imaginary part, both as double. I don't know how C does this internally, via a struct or not, but that does not matter. Both implementations are equivalent and do exactly the same.
Effectively what the C code does: -2.0 * I * M_PI * k / n is an angle i.e. a real.
cexp computes a complex re = cos(angle) and im = sin (angle).
In wp's example however, a complex is passed to cexp; cexp treats the imaginary part as angle, the real part as damping. That is an extension you don't need for the FFT, where damping must be zero.