It is referring to bare extern declarations, "When you use an extern
definition on its own **as in the examples above**." In this case, bad
things can happen if you declare a function with the wrong signature
or declare an int where a long was expected, and then link against a
library with (incompatible) definitions for the same names. Really,
this is just the same caviate as using "extern" in C or C++. If header
files are available, you should almost always be using the "cdef
extern from" form.
As for complex numbers, Cython provides its own implementation for
them in C (as the C standard doesn't require them), but if complex.h
is included (directly or indirectly) it uses the "native" c99 types.
For C++ it always uses the C++ complex types.
- Robert