All languages have a virtual machine, or if you prefer abstract machine, that describes how the language sees the hardware.
CINT is a C/C++ interpreter for example,
http://root.cern.ch/drupal/content/cint
Programming languages are independent of their canonical implementation.
Usually the usage of a compiler, interpreter or JIT as default implementation is a matter of return of investment for the set of tasks the language is targeted for.
it will abstract you away, from device drivers, processor assembly, memory, (using files to represent a collection of data blocks in a block device)
C is a VM. but not the same way the Java VM is a vm.. cause that is a VM on top of another VM (OS and processor assembly)
its a software abstraction of a hardware system? its a VM.