tutorial tarjeta puertas para llaves español electronicas edificios clonar cerradura c++ if-statement

c++ - tarjeta - si y más sin llaves



solidity español (3)

Espero que compile el siguiente código. Clang y VC ++ me dan un error en la línea con else .

void MyFunction(std::int32_t& error) { std::int32_t variable = 0; if(GetSomething()) error = EOK; else error = ERROR; }

Si pongo llaves, error = EOK; , luego compila. ¿Por qué VC ++ dice:

ilegal else sin coincidir si

?

Mi código completo está debajo, reemplazando std :: uint32_t con un typedef. Todavía da el mismo error en VC ++.

using sint32 = int; #define ERROR 5; #define EOK 0; bool GetSomething(); void MyFunction(sint32& error) { sint32 variable = 0; if (GetSomething()) error = EOK; else error = ERROR; }


Aquí hay una posible solución:

enum { EOK = 0, ERROR = 5 };

Tenga en cuenta que todos los identificadores que comienzan con E seguidos de otra letra mayúscula o un número están reservados para su uso como nombres de macro por <cerrno> , por lo que para evitar conflictos de nombres considere usar una convención de nomenclatura diferente para sus errores.


Para ser más útil y más eficiente, puedes hacer:

error = (GetSomething()) ? 0 : 5 ;

Y si quieres con enum como dice Matt, se convierte en:

error = (GetSomething()) ? enum.EOK : enum.ERROR ;


Si su definición de EOK es la siguiente:

#define EOK 0;

entonces causaría este tipo de error, porque termina a la fuerza el enunciado if antes de que se llegue al else, convirtiéndolo en un else sin un if correspondiente. El compilador ve este código después de la sustitución de macro:

if(GetSomething()) error = 0;; else