2010-11-10 11 views
7

Recuerdo haber leído antes sobre la importancia (o la falta de ella) entre incluir un nombre de parámetro en una declaración de función y no incluir uno. Pero no puedo recordar qué fue lo que leí o dónde lo leí.¿cuál es la diferencia entre incluir un nombre de parámetro en una declaración de función y no incluir uno?

por ejemplo,

void do_something(int *); // No parameter name included, only type. 

vs ...

void do_something(int * i); // type AND parameter name included. 

Entonces, ¿cuál es la diferencia entre estas dos declaraciones? Gracias por leer y quizás responder a esta pregunta posiblemente trivial.

- ACTUALIZACIÓN -

bien, así que lo que había leído era un conjunto de guías de estilo de un viejo profesor de advertencia de minas en contra de incluir un nombre de parámetro en la definición de la función y no se utiliza el parámetro de la función .

void do_something(int * i) { //code that doesn't use i;} //BAD 
void do_something(int *) { //code that doesn't use i;} //OK 

Respuesta

12

No hay diferencia, en lo que se refiere al compilador.

Adición de nombres de los parámetros significativos es una forma útil de la documentación, sin embargo.

1

La diferencia es que la segunda versión podría ser más legible si elige un buen nombre de parámetro. Nada más que decir ;-)

0

En una declaración adelantada, no debería haber ninguna diferencia. Ambos describirán el mismo diseño de memoria para la llamada, por lo que deben ser completamente intercambiables.

1

No hay diferencia técnica entre esas declaraciones. Si en su lugar tuviera

void accumulate_stats(int * count); 

o algo similarmente descriptivo, sería una mejora en la auto-documentación.

0

Para una declaración directa, no hace ninguna diferencia.

En la definición real, un parámetro sin nombre no está activada para su uso. Es una forma de tener parámetros sin usar sin alguna macro UNUSED_PARAM (x) o algún otro truco cuyo único propósito es cerrar el compilador al respecto.

+0

macros son una especie de mal, lo que con colisiones de nombres, múltiples evaluaciones de argumentos, etc. A veces son prácticamente necesario, pero es una buena idea para evitarlos en general. Entonces, mejor use la plantilla de función 'unusedParam'. Es decir, si no puedes vivir con las advertencias. Cheers, –

+0

De acuerdo, las macros son malvadas. Pero IMO, cualquier código que existe solo para decir "sí, no estoy haciendo nada con este argumento. ¡Cállate, estúpido compilador!" no es mucho mejor – cHao

+0

Por eso existe la sintaxis '(void) argName;'. Eso le dice al compilador que 'argName' es" usado ", aunque se evalúa como no-op. –

Cuestiones relacionadas