2010-04-04 16 views
7

Estoy aprendiendo C y vi en un libro que un prototipo de función tiene la forma void f() y en la declaración de función o en la función de llamada, la función f toma argumentos.
Por lo tanto, en la declaración de función tenemos algo como void f (double double y [], long double A) y en la función de llamada está f (y, A).
La función realiza operaciones en la matriz y, por ejemplo, cuando se llama a la función, algunos elementos de la matriz y están cambiando. A es solo un valor numérico constante que no cambia. Tengo dos preguntas:prototipo de función C: vacío f(). Es recomendado?

  1. Si definir el prototipo de función en la parte superior del programa como nulo f() ¿una buena práctica? ¿O es mejor ponerlo como vacío f (largo doble y [], largo doble A) como en la declaración de función?

  2. La función llamada f está cambiando elementos en la matriz y. ¿Es nulo el tipo de devolución correcto? El programa funciona bien como tal con el vacío tal como se describe.
    O debería cambiar todos mis "vacíos" a "doble largo".
    Estoy trabajando con doble largo ya que necesito tanta precisión como sea posible, aunque en mi máquina el doble y el doble largo me dan 15 dígitos de precisión.

Muchas gracias

+5

¿En qué libro viste esto? –

+0

"void f (double double y [], long double A)" es "long double y []" permitido como parámetro? –

+0

@Andrei, seguro, ¿por qué no? –

Respuesta

7

Si define el prototipo de función en la parte superior en el programa como void f() es una buena práctica ? ¿O es mejor poner como vacío f (largo doble y [], largo doble A) como en la declaración de la función ?

Definitivamente este último: el primero no proporciona al compilador ningún tipo de información para los controles en tiempo de compilación. void f() le dice al compilador que f toma una lista de argumentos no especificados. Es decir. todo vale.

La función llamada f está cambiando elementos en la matriz y. ¿Es nulo el tipo de devolución a la derecha? El programa es que funciona bien como tal con el vacío como descrito.

El tipo de retorno no tiene nada que ver con el parámetro que se está modificando. Sin embargo, puede tener un tipo de devolución que no sea void si desea indicar un código de éxito.

+0

Después de leer todos sus comentarios aquí, entiendo que aunque void f() funciona, no es recomendable. Es más seguro instruir al compilador sobre los argumentos correctos. – yCalleecharan

4

No, no es bueno tener una declaración con argumentos no especificados. En C (pero no en C++) se permite declarar una función como f() sin especificar el argumento, pero se debe evitar el uso de esa funcionalidad. Si la función no acepta ningún argumento, use f(void) para marcarlo explícitamente. Si la función acepta argumento, siempre incluya los tipos de argumentos en la declaración.

+0

Gracias por aclarar. Después de leer las 3 respuestas aquí, entiendo que el código debe hacerse legible en la medida de lo posible y que necesito seguir buenos estándares de programación. – yCalleecharan

10

Su pregunta sufre una confusión terminológica.

void f(); 

es no un prototipo de función en C. Esta es una declaración función que no introduzca un prototipo.Mientras tanto

void f(long double y[], long double A); 

es también una declaración de la función, y éste es un prototipo (es decir, sí introduce un prototipo para f).

Para responder a sus preguntas, sí, siempre es una buena práctica declarar funciones con prototipos (es decir, es mejor declararlos con prototipos que sin prototipos). Normalmente, debe declarar prototipos para todas sus funciones externas (y void f() no es un prototipo).

En cuanto a los tipos de devolución, es toda una cuestión de su intención. No veo cómo el hecho de que esté cambiando los elementos de la matriz debería hacer que sea mejor devolver long double en lugar de void.

+0

Gracias por señalar el error en la terminología y para el último comentario sobre cuál es la función es "regresar". – yCalleecharan

Cuestiones relacionadas