Error compilación con "char" [SOLUCIONADO]

Hola, he encontrado este código y me puse a trastearlo para así de paso entenderlo y aprender un poco más, pero me da un error (en linea

if(!strcmp(MARCA, A )){ //si coinciden las dos variables

que no soy capaz de entender porque sigue dando ese error y como está recién instalado ahora en windows 10 no sé si este sea el que da problemas

Error:

Arduino:1.6.7 (Windows 10), Placa:"Arduino/Genuino Uno"
C:\Users\pc-128\Desktop\sketch_jan08a\sketch_jan08a.ino: In function 'void accadmin()':
sketch_jan08a:150: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
if(!strcmp(MARCA, A )){                  //si coinciden las dos variables     
                  ^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:25:0,
from C:\Users\pc 128\AppData\Local\Temp\build9d6cb74ca1be1b23f6f8bb7f4dae6a7f.tmp\sketch\sketch_jan08a.ino.cpp:1:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\string.h:125:12: error:   initializing argument 1 of 'int strcmp(const char*, const char*)' [-fpermissive]
extern int strcmp(const char *, const char *) __ATTR_PURE__;
        ^
sketch_jan08a:150: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
if(!strcmp(MARCA, A )){                  //si coinciden las dos variables     
                  ^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:25:0,

             from C:\Users\pc-128\AppData\Local\Temp\build9d6cb74ca1be1b23f6f8bb7f4dae6a7f.tmp\sketch\sketch_jan08a.ino.cpp:1:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\string.h:125:12: error:   initializing argument 2 of 'int strcmp(const char*, const char*)' [-fpermissive]

extern int strcmp(const char *, const char *) __ATTR_PURE__;

        ^

C:\Users\pc-128\Desktop\sketch_jan08a\sketch_jan08a.ino: In function 'void nuevaclave()':

sketch_jan08a:275: error: expected '}' at end of input

}   

^

Siento tener que adjuntar el archivo pero es imposible escribirlo aqui ya que dice tiene mas de 9000 caracteres

sketch_jan08a.ino (15.9 KB)

El código que has puesto (por cierto, incorrectamente), compila mal pero por otro error, faltan unas cuantas llaves al final. Poniendolas compila correctamente.

Te lo dejo como adjunto.

sketch_jan10a.ino (16.6 KB)

Gracias victorjam, aunque se que en el error describia que faltaba { al final, ni aún el tuyo modificado me funcionaba, me volvia a decir y a marcar destacado exactamente el mismo error en la misma linea, por tanto ahora ya si supe que el problema era algo que aqui no estaba funcionando. Actualice esto y ahora ya no da error.

Con respecto a la estructura del post, lo siento no me dejó ni me ahora me deja quitar esa parte donde se mete el sketch y ahora tengo el texto. Al principio intente meterlo ahí directamente pero me dijo que tenia más de 9.000 caracteres por lo que tendría que adjuntarlo, y a pesar de que entonces eliminé esa opción ahora veo que no lo ha hecho, y aún intentando quitarla ahora ni asi me deja.

Gracias por tu ayuda, porque por mucho que cambiara e intentara modificar siempre me daba el mismo error y por tanto lo achaqué a que tenia que ser un error en esa linea y que yo no era capaz de ver.

Compiliado con PlatformIO da 0 errores

Checking size .pio\build\esp12e\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
DATA: [=== ] 33.6% (used 27488 bytes from 81920 bytes)
PROGRAM: [=== ] 25.5% (used 266684 bytes from 1044464 bytes)

El código del archivo que adjuntaste sketch_jan08a.ino, quitando lo de las llaves, compila y da 0 errores.

Estas usando una versión vieja de IDE (1.6.7), yo la versión 1.8.7 y Surbyte usa PlatformIO y seguro está también actualizada.

El problema radica en el strcmp. Es una función que compara dos cadenas de caracteres. Dichas cadenas son pasadas como parámetros y son del tipo const char *. En el programa las variables MARCA y A están definidas como char. Por lo tanto al hacer:

if ( !strcmp(MARCA,A) ) {

}

Da error porque se esperaba que los parametros fueran dos cadenas de caracteres (char*) y le hemos pasado dos caracteres (char).

Si lo que vamos a comparar son simples caracteres basta con hacer MARCA==A (igual) o MARCA!=A (distinto).

Lo cual, ahora, me deja perplejo. ¿por qué a mi y a Surbyte no nos da error? Creo han sobrecargado la función strcmp en versiones modernas y creado una versión strcmp(char,char) y por eso funciona, o todo lo contrario, han hecho algo mal en versiones modernas y la función no hace lo que tiene que hacer.

Y porque no reemplazas

if ( !strcmp(MARCA,A) ) {

por

if (MARCA != 'A')

eso funciona del mismo modo.

Pero no debería, Surbyte, de hecho strcmp debería tirar un error, puesto que MARCA y A son char, no char*. Que es lo que hace la versión 1.6.7 y la 1.8.7 no.

Hola, a mi no me compilaba, cuando se suponia que sí que lo hacía (no es mío). El error que me daba era en linea que comenté, y como justo acababa de instalar windows 10 con el Ide que siempre me funcionó, que era el mismo que usaba en windows 7, supuse que algo no iba bien en el sketch pues por mucho que le cambiaba y probaba siempre me mandaba el mismo error, en la misma linea, y sólo al final fue cuando dijo que habia tambien un error de falta de "}" .

Fue entonces cuando empecé a comprobar este ultimo aviso de error, pero aún así seguia marcando esa linea como error, incluso cuando victorjam (gracias de nuevo) corrigió el error, aún a ese nuevo ya solucionado, a mi me seguia dando exactamente el mismo error, cuando ya estaba claro que este ya si estaba funcionando, por lo que ya, lógicamente, el error estaba en mi pc.

Actualice el ide y a la primera ya funcionó sin dar error (no lo he montado aun, pero ya al menos si compiló sin problemas).

Mi problema realmente erá que tampoco entendia bien si esa linea estaba escrita correctamente y por mucho que busqué no pude encontrar nada.

Gracias, como siempre, por vuestra ayuda