Después de programar en C durante varios años, me di cuenta de que he estado ignorando la convención C de devolver cero de una función para indicar el éxito. La convención me parece semánticamente incorrecta, ya que cero es, por supuesto, falso. El problema es que me gusta el nombre de funciones como is_valid_foobar()
, y con el fin de acomodar la convención de 'falsos medios éxito', que tendría que ser más vaga ... que es en lugar de:¿Debo devolver los valores VERDADERO/FALSO de una función C?
if (! is_valid_foobar()) {
return (error);
}
Otros programadores escribir:
if (validate_foobar()) {
return (error);
}
Y mi aplicación se parece a:
int is_valid_foobar (int foobar) {
if (foobar < MAX_ALLOWED) {
return TRUE;
}
return FALSE;
}
realidad no he cogido ninguna críticas por esto en las revisiones de código. Así que estoy pensando que no es un hábito tan terrible, pero es "poco convencional". Tengo curiosidad por lo que piensa la gente.
Soy muy cuidadoso con las opciones que tomo para nombres de funciones y variables, y un comentario típico de revisión es "el código es muy claro", y además no me molesta en absoluto tener que escribir un extra !
en la parte frontal de la llamada de función. Pero ¿qué dices, oh poderosos de S.O?
Correcto, y si no le gusta usar 0 para el éxito, generalmente los marcos o plataformas proporcionan algo así como una macro/valor (el nombre interesante) ERROR_SUCCESS (junto con los nombres de código de error correspondientes) para abstraerse del numérico valores algo –
Este uso también permite la formulación "if (int e = foo()) {/ * manejar errores * /};", lo que puede parecer torpe a las personas planteadas en más idiomas, pero está limpio y resbaladizo según los estándares c. – dmckee