è il contrario... i primiviti sono quelli definiti nel K&C e sono char, int, float e double (fanno parte del linguaggio senza bisogno di alcuna libreria).

Gli elementari (in realtà nn ho mai sentito parlare di tipi di dato elementari in C. Ne ho sentito parlare in logica e si tratta di elementi costruiti sulla base dei primitivi) sono quelli che dici tu, in quanto costruiti a partire dai primitivi.

Ad esempio
typedef __time32_t time_t;
__time32_t è a sua volta un long int (primitivo + qualificatore)

Quindi presumo che scoprendo da quale tipo di dato primitivo derivino tu possa scoprire la sintassi per stamparli.