Si declaro algo usando #define, el arduino recordará una vez desconectado esa declaracion?

Hola, soy un principiante, por eso tengo esta duda muy básica pero quiero estar seguro.

Se que #define no ocupa memoria porque se declara el momento de compilar.

Ejemplo:

#define LEDROJO 3

Eso quiere decir que como se declara al momento de compilar si me llevo el Arduino a otro lugar, cuando alimente la placa ya no recordará que LEDROJO es 3 y por lo tanto no encenderá ese LED? (por que se supone que ese 3 no estará almacenado en el microcontrolador)

¿y si utilizo const en vez de #define tendré el mismo problema?

Ojalá se entienda y gracias de antemano.

Define es una cláusula del compilador que hace lo mismo que const int asi que quédate tranquilo que no importa donde dejes el arduino, al arrancar sabra que el 3 corresponde a LEDROJO

1 Like

disculpa que te moleste, pero a que te refieres con que es una cláusula del compilador?

Es que todavía no se me ocurre como el arduino sabe que el 3 corresponde a LEDROJO si se supone no esta almacenado en su memoria.

o estoy entendiendo algo mal?

En C/C++, #define es una directiva de preprocesador generalmente se lo usa para crear macros, ahora un macro es una secuencia de código que se puede utilizar como una abreviatura o un sustituto de una porción más grande de código.
por ejemplo, la estructura es la siguiente

#define nombre_macro valor

Cuando el preprocesador encuentra una línea que comienza con #define , reemplaza todas las ocurrencias de nombre_macro por valor en el código fuente antes de que el programa se compile.
Entonces por poner un ejemplo cuando tú haces esto:

#define LEDROJO 3

void setup()
{
     pinMode(LEDROJO , OUTPUT);
}
.....................................

Al momento de copilarse el código todo lo que este con LEDROJO se remplazará con 3 por lo cual siempre sabrá que es 3 porque queda guardado en el código, pero ya no como LEDROJO si no como 3.

Esa seria entonces la explicación de porque lo recuerda. obviamente hay varios detalles técnicos que escapan a mi actual conocimiento, pero por acá tengo para buscar información y tener mas clara la película.

Gracias por la respuesta.

Te intento explicar mas clara la película:
Es muy diferente el declarar const que #define.

#define se llama, como bien te han comentado, una directiva del precompilador. Esto significa que antes de compilar busca en tu código todo lo que ponga LEDROJO y lo cambia por un 3 y después compila el código. Bueno realmente lo hace cuando va compilando la línea pero para no liarte piensa en eso.
Sería lo análogo a que tu antes de enviar un documento word por correo electrónico dieras a buscar y reemplazar LEDROJO por 3 y después lo enviaras por mail.

Dado que ese cambio está en el código se quedará para siempre así en el arduino.

Ahora bien, si usas const estas usando una parte de memoria del arduino. Es decir un área de memoria para ello. const solo implica que no te permitirá cambiar esa variable pero se guardará y ocupará memoria como si de otra variable más se tratara.
si usasconst int LEDROJO=3; ocupa lo mismo que int LEDROJO=3; pero si intentas cambiar la variable así en cualquier parte del código: LEDROJO=4; y la has definido como const, te dará error. Para entendernos const sirve para proteger el valor de la variable. Digamos que la convierte en solo lectura.

Volviendo al tema, las variables declaradas con o sin const se preparar cuando compilas. las directivas como #define se preparan justo antes de compilar.

Si haces esto:

#define LEDROJO 3
println(LEDROJO);
#define LEDROJO 4
println(LEDROJO);

Te dará salida así:

3
4

Eso es porque el compilador, cuando está compilando lee linea a linea pero antes de convertirlo en código máquina, lo primero que hace es pasalo al precompilador para que, entre otras cosas, cambie los #define
Saludos

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.