CUDA code runs on both the central processing unit (CPU) and graphics processing unit (GPU).
NVCC separates these two parts and sends host code (the part of code which will be run on the CPU) to a C compiler like GNU Compiler Collection (GCC) or Intel C++ Compiler (ICC) or Microsoft Visual C++ Compiler, and sends the device code (the part which will run on the GPU) to the GPU.
[1] According to Nvidia provided documentation, nvcc in version 7.0 supports many language constructs that are defined by the C++11 standard, and a few from C99.
[2] Any source file containing CUDA language extensions (.cu) must be compiled with nvcc.
NVCC can output either C code (CPU Code) that must then be compiled with the rest of the application using another tool or Parallel Thread Execution (PTX) or object code directly.