Compruebe si una variable (String) está bien definida: ¿usar el preprocesador?

2

Actualmente estoy desarrollando un proyecto basado en Arduino que implica una verificación de contraseña.

La contraseña se proporciona como una variable global en el código fuente. Sin embargo, la contraseña solo debe permitir ciertos caracteres (básicamente solo letras, números y solo algunos caracteres especiales).

Quiero asegurarme de que no se utilicen otros caracteres; de lo contrario, el código no debería compilarse.

¿Hay alguna forma (posiblemente utilizando el preprocesador) de verificar una variable de cadena para los caracteres que contiene y abortar la compilación si se usan caracteres "ilegales"?

Ejemplo de código snipplet (probablemente no sea necesario, sin embargo ...):

const String password1 = "test"; // should compile
const String password2 = "%$§~^"; // should NOT compile
    
pregunta Marcel

1 respuesta

4

No, no creo que esto sea posible en el nivel de preprocesador. El preprocesador de C no puede inspeccionar cadenas.

Si tuviera que abandonar el IDE de Arduino y utilizar un Makefile o un script de shell, podría hacerlo allí.

Algo a lo largo de las líneas de:

PASSWORD="test"

if [ echo $PASSWORD | grep -e <magic regexp for invalid chars> ]
then
gcc ... -DPASSWORD="$(PASSWORD)"
else
exit 1
fi

Otra forma podría ser:

typedef enum
{
MY_A 'a',
MY_B 'b',
MY_C 'c',
// etc. for all allowed characters
} my_charset;

const my_charset *password = {MY_P, MY_A, MY_S, MY_S, MY_W, MY_O, MY_R, MY_D};
    
respondido por el Toby Jaffey

Lea otras preguntas en las etiquetas