A programming language (alternatively, a computational model) is called Turing complete if it is equivalent to the Turing machine model: any program written in the language can be simulated with some Turing machine, and every Turing machine can be simulated by some program written in the language.

The Church-Turing thesis states that any "interesting" computational model is Turing complete.

Since the (technical) theory of recursive functions is Turing complete, a programming language is Turing complete iff every program calculates some recursive function, and every recursive function may be calculated by some program in the language.

Primitive recursive functions are not Turing complete: they cannot express the Ackermann function. C and Pascal are Turing complete if we're careful to ignore some details (e.g. a C implementation must use pointers of some finite size sizeof(void *), implying it can only use some finite amount of data). Real programming languages are Turing complete only if we ignore the constraints of finiteness.