Un compilador traduce un código fuente escrito en un lenguaje de alto nivel a código objeto en lenguaje máquina, mientras que un intérprete traduce e interpreta el código instrucción por instrucción. Los lenguajes de alto nivel se expresan de forma cercana al pensamiento humano, mientras que los lenguajes de bajo nivel son más cercanos a la máquina. C es un lenguaje de medio nivel que permite cierto control a bajo nivel.