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