arduino

Diferencia entre #define y const en Arduino

Introducción

Las constantes; como sabemos, no cambian su valor en tiempo de ejecución. Son útiles para prevenir que nosotros mismos tengamos errores.

En el lenguaje de Arduino, que no es otra cosa que C y C++, podemos declarar constantes usando #define y también const. Cada una de ellas tiene su explicación.

#define

Es un macro que se ejecuta antes de la compilación. Para explicarlo de la manera más sencilla, supongamos que definimos lo siguiente:

#define NUMERO 1

void setup(){
  pinMode(NUMERO, OUTPUT);
  digitalWrite(NUMERO, HIGH);
}

Antes de que el código sea compilado, se hará un buscar y remplazar, en donde las ocurrencias serán (valga la redundancia) remplazadas por el valor verdadero. Por lo que (no podemos verlo, pero así es), el programa de arriba se convertiría en lo siguiente:

void setup(){
  pinMode(1, OUTPUT);
  digitalWrite(1, HIGH);
}

Es decir, remplazó las constantes por el valor verdadero.

Ventajas

  • No ocupa memoria para almacenar las constantes, puesto que son remplazadas por sus valores
  • Si vamos a usarlo para cosas pequeñas, como definir un pin, una cadena, etcétera, nos viene genial

Desventajas

  • No tienen tipo. Por lo que el compilador no podrá avisarnos si algo estamos haciendo mal
  • Son globales, por lo que debemos ser sumamente cuidadosos al referirnos a ellas

 

Const

Para declarar una constante, usamos const seguido del tipo de la variable. Por ejemplo:

const int numero = 1;

Al compilar, esto no se remplaza. Queda así como está. Y si el compilador detecta que en algún momento de nuestro código queremos asignarle un nuevo valor nos arrojará un valor.

Ventajas

Obedecen el ámbito de las funciones. Es decir, podemos declarar dos constantes con el mismo nombre en diferentes funciones:

void funcionUno(){
  const int edad = 18;
}

void otraFuncion(){
  const int edad = 50;
}

Y podemos usarlas dentro de cada función sin que choquen. También tiene la ventaja de que tiene tipo, por lo que el compilador nos informará los errores que puede que estemos cometiendo.

const también permite declarar arreglos, cosa que #define no.

Finalmente, cabe mencionar que el uso de const es recomendado en lugar de #define según este artículo.

Conclusión

Personalmente utilizo #define porque no trabajo en proyectos grandes, y las librerías que incluyo no colisionan con el nombre de mis constantes.

Sin embargo, es una buena práctica usar const en lugar de #define según el sitio oficial de Arduino. Y si ellos lo dicen, es porque así debería ser. Además, en la mayoría de casos tenemos memoria de sobra para los proyectos que hacemos, por lo que no tenemos que ahorrarla usando #define.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.