C语言的预处理有哪几种?各有什么作用?