c++ - compiler - gcc linux
¿Accediendo a las variables de Makefile en el código? (2)
De acuerdo con la literatura en el sitio de Arduino :
Concatenar en un constructor "da resultados impredecibles porque ''auth_raw'' nunca obtuvo un valor inicial antes de comenzar a concatenar diferentes tipos de datos. Para mejores resultados, inicialice sus cadenas antes de concatenarlas".
En lo que respecta a las variables que está pasando a su archivo MAKE, la sintaxis es correcta, y la línea de comando -D para definir esas variables también es válida. Sin embargo, como lo señala la documentación, debe evitar mezclar enteros y cadenas al pasar a un constructor, aunque sería perfectamente válido construir primero la Cadena y luego concatenar los valores.
PROGRESO ACTUALIZADO
Lamento haber olvidado especificar esta pregunta como una pregunta de Arduino. Simplemente asumí que es un problema de preprocesador que es algo independiente de la plataforma en la que se está ejecutando.
Estoy usando Arduino-Make y estoy tratando de pasar en USERNAME y PASSWORD
BOARD_TAG = mega2560
CPPFLAGS = -DUSERNAME="$(USERNAME)" -DPASSWORD="$(PASSWORD)"
include $(ARDMK_DIR)/Arduino.mk
Línea de comando:
make USERNAME="HELLO" PASSWORD="WORLD"
Código:
void setup() {
Serial.begin(9600);
String auth_raw2(USERNAME : PASSWORD);
Serial.println(auth_raw2);
}
void loop() {}
Estoy recibiendo este error:
macro.ino:10:29: error: found ‘:’ in nested-name-specifier, expected ‘::’
macro.ino:10:20: error: ‘HELLO’ has not been declared
Lo que quieres es
String auth_raw( USERNAME ":" PASSWORD );
Eso hará la concatenación de cadenas literal correcta que estás buscando. El compilador ejecutará literales de cadena adyacentes en una sola cadena. Entonces si tienes
char a[] = "The " "quick" " brown " "fox";
lo trata igual que si escribieras
char a[] = "The quick brown fox";
No estoy seguro de poner "alrededor de los valores proporcionados en la línea de comando para hacer.