Estoy escribiendo algunas funciones que manipulan cadenas en C y devuelven extractos de la cadena.Formato de función en un programa C
¿Cuáles son sus pensamientos sobre buenos estilos para devolver los valores de las funciones.
Refiriéndose a Steve McConnell's Code Complete (sección 5.8 en la edición de 1993), sugiere que utilizo el siguiente formato:
void my_function (char *p_in_string, char *p_out_string, int *status)
Las alternativas que estoy considerando son:
devolver el resultado de la función (opción 2) usando:
char* my_function (char *p_in_string, int *status)
devolver el estado de la función (opción 3) usando:
int my_function (char *p_in_string, char *p_out_string)
En la opción 2 que sería volver la dirección de una variable local de mi_funcion pero mi función que llama estaría utilizando el valor de inmediato por lo que considero que esto sea OK y asume la posición de memoria no ha sido reutilizado (correcta yo en esto si estoy equivocado).
¿Esto se debe a un estilo y preferencia personal o debería considerar otros problemas?
"En la opción 2 que sería volver la dirección de una variable local de mi_funcion pero mi función que llama estaría utilizando el valor de inmediato por lo que considero que esto sea OK y asume la posición de memoria no ha sido reutilizado (corrígeme si estoy equivocado) ". Esa no sería una buena suposición para hacer. – Amber
La misma forma no es sensible para todas las operaciones de cadena. La forma que tome la llamada de función dependerá de lo que haga. Y no, utilizar el puntero a una variable local no es seguro, bajo ninguna circunstancia. –
opción 2 es peligroso, no debe suponer un puntero a una función que la variable de pila local permanece después de la llamada. el único caso que sería algo seguro sería una función variable estática local, que es una mala idea por otras razones (seguridad y reentrada de hilos) – Hasturkun