2012-02-07 9 views
5

veces veo código como este:Por qué los nombres de parámetros comentario en lugar de salir de él, ya que es

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 

Por qué los nombres de parámetros comentario en lugar de dejarlo como está?

+1

Quizás alguien que se hizo cargo del código sabe que los nombres de los parámetros no son obligatorios en la declaración de la función, mientras que el que escribió el código no tuvo conocimiento de este hecho. Es solo una preferencia de uno sobre otro. –

Respuesta

6

Una razón que veo para hacer esto es que explícitamente desea decirle a otros programadores que no utilicen los parámetros, pero déjalos en comentarios para una descripción de su intención. Sé que esto no tiene sentido ahora, pero sigue leyendo.

voy a utilizar un ejemplo diferente:

class A 
{ 
public: 
    virtual void foo(int someProperty); 
}; 

class B : public A 
{ 
public: 
    virtual void foo(int /*someProperty*/); 
}; 

Digamos que usted quiere esto para un caso específico en el que desea B::foo() hacer algo de material extra, y luego llamar a A::foo() con el parámetro 0. Debe mantener la misma firma de función, para que el polimorfismo funcione, pero, dentro de B::foo(), no está realmente usando el parámetro. Tampoco quieres usarlo en el futuro. Básicamente es una declaración de intenciones, que dice "la lógica de este método no debe depender de alguna propiedad".

B::foo(int/*someProperty*/) 
{ 
    //do some stuff 
    A::foo(0); 
} 

Con el nombre del parámetro como comentario, realmente no se puede utilizar (a menos que llegar a alguna hacking).Pero el nombre comentado te dice algo sobre el parámetro que pasas al A::foo() - es 'someProperty' de A.

Ahora, no estoy de acuerdo con la sintaxis, pero esta puede ser una posible explicación.

0

Si la función llamada (OnPaint en su ejemplo) no usa los argumentos, el codificador puede evitar mensajes de advertencia sobre argumentos no utilizados al compilar al no proporcionar nombres de argumento.

0

Algunos compiladores no emitirían una "advertencia de argumento no utilizado" al comentar el argumento o al no proporcionarlo en primer lugar. Pero, por supuesto, deberías dejar el tipo para tener la firma correcta.

3

Si realmente no son necesarios los parámetros, no es necesario que los nombre

Si usted no nombra a ellos, a primera vista no puede entender por qué están allí en el primer lugar.

Si los nombra, algunos compiladores le advertirán sobre los parámetros no utilizados.

Dejar los nombres como comentarios es un término medio entre los dos enfoques.

2

Si ese es el principio de la definición de onPaint() he visto comentado nombres de los argumentos utilizados para evitar "unreferenced formal parameter" advertencias del compilador (estas advertencias sólo aparecerán en un alto nivel de alerta, el nivel -W4 para compiladores de Microsoft).

10

Creo que hay/hubo algunos compiladores que emitieron una advertencia de 'argumento no usado' cuando, bueno, los argumentos no se usaron.

Especialmente en las funciones de controlador de mensajes como la que mostró, los argumentos a menudo no son necesarios para realizar la tarea. Entonces al comentar el argumento nombres, puede deshacerse de las advertencias.

Por otro lado, si luego desea utilizar algunos de los argumentos, es útil tener los nombres a mano, por lo que comentar es más fácil que simplemente borrar los nombres.

+0

compiladores aún generan esas advertencias cuando se establece en/w4 – Stefan

+0

Ok, no estaba seguro. Parece que siempre utilicé todos mis argumentos en mis proyectos recientes de C++ :) – MartinStettner

Cuestiones relacionadas