NesC (Network Embedded Systems C) es un dialecto del lenguaje de programación C optimizado para las limitaciones de memoria de las redes de sensores. Existen varias herramientas que completan y facilitan su uso, escritas en su mayoría en Java y en Bash. Otras herramientas y librerías asociadas están escritas principalmente en C.

NesC es un lenguaje orientado a componentes y está especialmente diseñado para programar aplicaciones sobre redes de sensores, en particular en el sistema operativo TinyOS.

Un programa en NesC está estructurado mediante componentes, el usuario crea su propio componente ayudado a su vez de otros componentes ya creados. Dos componentes podrán comunicarse entre sí mediante una interfaz, la cual definifirá una serie de métodos (commands y events) los cuales deberán ser implementados en cada componente. Así, un método podrá solicitar la ejecución de un command de otro componente; por otro lado, para enviar una notificación se utilizarán un event.

Todo componente está dividido lógicamente en tres partes: Configuración, Implementación y Módulos.

La Configuración es conocida comúnmente como "wiring", esto es, una declaración de las interfaces utilizadas y que a su vez son proporcionadas por un componente. EJ:

implementation {
  components MainC;
  components Ejemplo as App;
  App.Boot -> MainC;
}

Los Módulos son lo que conocemos comúnmente como implementación, donde se programaran las acciones que llevará a cabo nuestro componente. Esta a su vez está dividida en tres partes: Provides, son las interfaces que nuestro componente ofrece; Uses, las interfaces que usa nuestro componente; Implementation, donde verdaderamente se realizan las acciones que queremos que realice nuestro programa.