2012-03-03 21 views
35

Duplicar posibles:
Error handling in C code
What return value should you use for a failed function call in C?¿Debo devolver 0 o 1 para una función exitosa?

siempre uso 0, pero realmente no se puede leer en si, mientras, etc.

si regreso 1? ¿Por qué la función principal devuelve 0 para tener éxito?

+1

La pregunta vinculada se cerró. – bernie

+0

@AdamBernier: como duplicado. Tenía algunas respuestas muy relevantes. –

+0

@Oli: no parece apropiado que la otra pregunta se haya cerrado como duplicado (quizás no lo estoy viendo). Sin embargo, estoy de acuerdo con cerrar ese y este: las preguntas parecen demasiado abiertas para este sitio web en particular. – bernie

Respuesta

33

Está definido por el estándar C como 0 para tener éxito (los créditos van a hvd).

But

Para mayor portabilidad, puede utilizar la EXIT_SUCCESS macros y EXIT_FAILURE para el valor de estado convencional para el éxito y el fracaso , respectivamente. Se declaran en el archivo stdlib.h.

(estoy hablando del valor devuelto al sistema operativo desde principal, salida o llamadas similares)

En cuanto a su función, vuelven con lo que deseas, y hace que el código sea más legible, como se siempre y cuando lo mantenga de esa manera a lo largo de sus programas.

+0

0 siempre significa éxito, pero también se permite que otros códigos de salida tengan éxito dependiendo del sistema. – hvd

+0

@hvd Eso no es verdad. Los valores de 'EXIT_SUCCESS' y' EXIT_FAILURE' no están definidos en el estándar C. –

+2

@AndrewMarshall 'EXIT_SUCCESS' podría tener algún otro valor distinto de 0, pero aun así,' return 0; '* también * significa éxito. – hvd

-4

Si devuelve un estado booleano, puede escribir def de int y usar eso. Esto hace que el tipo de devolución de sus funciones sea obvio y usted (y otros) no tendrán que comprobar si devuelve 0 o 1 para .

typedef int BOOL; 
#ifndef TRUE 
#define TRUE 1 
#endif 

#ifndef FALSE 
#define FALSE 0 
#endif 

BOOL myfunc() 
{ 
    ... 
    return TRUE; 
} 
+9

¿Por qué recrearías el tipo estándar 'bool'? – hvd

+0

@hvd Creo que sería un error, ya que obtendría errores si alguna vez compiló el código contra C++ en el futuro. Puede elegir otros nombres, por ejemplo 'bool_t' o algo. – trojanfoe

+2

Tanto en C como en C++, puede '#include ' y usar el tipo 'bool' sin definirlo manualmente como typedef.En C++ no necesita '', pero está permitido e inofensivo, y se envuelve fácilmente en un '#ifdef __cplusplus' si es necesario. – hvd

10

La razón por la cual main usan 0 para tener éxito es que se usa como el código de salida de la aplicación al sistema operativo, donde 0 generalmente significa éxito y 1 (o superior) significa falla. (Por supuesto, siempre se debe utilizar las macros predefinidas EXIT_SUCCESS y EXIT_FAILURE.)

Dentro de una aplicación, sin embargo, es más natural utilizar cero para el fracaso y que no sea cero para el éxito, ya que el valor de retorno se puede utilizar directamente en un if como en:

if (my_func()) 
{ 
    ... 
} 
Cuestiones relacionadas