nesC는 component(컴포넌트) 기반의 프로그래밍 언어이기 때문에 여러 가지 장점이 있다. Component를 애플리케이션 소프트웨어를 만드는 부품이라는 의미로 생각하는 것이 이해에 도움이 된다. 부품들을 조립하면 하나의 시스템이 만들어지듯이, 소프트웨어 부품 (component)들을 잘 연결하여 조립하면 쉽게 하나의 애플리케이션 소프트웨어를 만들 수 있다는 것이 nesC의 가장 큰 장점이다. 임베디드 네트워크 환경에서의 코드 재 사용성이 많은 프로그래밍 언어이다. 만일, 1초마다 LED가 점등되는 애플리케이션을 만들고 싶으면, 기본 component인 Main, 시간을 관리하는 Timer, LED를 관리하는 세 개의 component를 조립하면, 하나의 애플리케이션을 만들 수 있다. 조립은 interface(인터페이스)라는 연결 도구를 이용한다. nesC의 또 하나의 장점은 컴파일 시에 하드웨어 동작 시에 발생할 수 있는 에러를 체크할수 있도록 만들어져 있다는 것이다. Linux 등의 OS에서는 “ ioctl(fd,TCSETS,data); “ 방법으로 CPU에 연결되어 있는 디바이스를 제어한다. 이 방법은 디바이스를 지시하는 fd(인자) 내용이, 동작(running)시에 명령을 내리는 디바이스마다 다르게 되며, 시스템의 특징에 따라 소프트웨어 개발자가 다른 이름으로 만들 수 있다. nesC는 이런 방식과 다르게, CPU에 연결되는 각 디바이스들를 동작 시키는 컴포넌트로 만들어 놓고, 이 컴포넌트를 이용하기 때문에 컴파일 할 때에 적절한 디바이스를 사용했고, 이 실제 동작 시에 발생할 수 있는 오류를 컴파일 과정 중에 체크할 수 있다. 소프트웨어를 컴파일 할 때, 플로우차트나 어떤 동작이 일어날 것인가를 컴파일러가 파악하기는 힘들다. 라는 인자에 어떠한 디바이스가 지정 될지 변수 자체만으로는 판단하기 힘들고, 또 각 디바이스를 제어하는 명령을 내릴 때, 이것이 적절한 명령인지 등을 파악할 수 없다. 센서 네트워크 디바이스처럼 한정된 개수의 간단한 주변 디바이스를 갖는 경우, nesC로 만들어진 컴포넌트는 소프트웨어의 동작상태 (running)에서의 오류를 컴파일 시에 체크하고 이를 방지할 수 있는 특징을 지니고 있다.
위의 그림은 Blink라는 애플리케이션의 조립상태(구조)를 보여주고 있다. nesC의 컴포넌트들은 인터페이스를 이용해서 조립되는데, 위의 그림에서 main component는 애플리케이션에 반드시 필요한 최상위 component이며, 이것이 SingleTimer, BlinkM component와 각각의 StdControl interface로 연결되어 있다.