Newsgroup: it.comp.lang.c++
Titolo: [pochino OT]Codice strano

Salve a tutti,
programmo da relativamente poco tempo in c++ e volevo chiedevi alcuni lumi
su alcune piccole cosettine.
Sto guardando alcuni sorgenti  (che per la verità è creato da visual studio,
ma non ha importanza ) e ci sono alcune cose che non
capisco tanto:
per esempio questa definizione di meodo:
void View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
Che senso ha  commentare i nomi delle variabili?
Il compilatore non esegue il push sullo stack? E' solo una "avviso" per chi
legge il codice e dovrà utilizzare la funzione?
Poi un'altra cosa che ho visto in altri codici:
ASSERT( pApp->m_pszProfileName != NULL );
ASSERT( pApp->m_pszProfileName[0] != _T('\0') );
pApp;
Che senso ha scrivere la variabile pApp senza nessuna operazione?
Alcune volte ho visto anche cose di questo tipo:
void mia_classe::mio_metodo( Obj* obj )
{
    obj;
}
Forse sono banalità ma volevo solo capire per curiosità il senso di questi
"stili".
Grazie a tutti e scusatemi se sono un pochino OT ma che io ricordi ma queste
piccole "stranezze" le ho viste solo da quando
ho preso in mano il C++.
Saluti
Gian

 [...]
1) > Che senso ha  commentare i nomi delle variabili?
2) > Che senso ha scrivere la variabile pApp senza nessuna operazione?
Non avendo visto il codice complessivo non sono del tutto sicuro delle mia
risposta, pero' penso che tutte le tecniche che hai indicato servano per
evitare che il compilatore produca warning del tipo "unused variable".
Mi spiego con un esempio. Una funzione di questo tipo, che definisce un
parametro interno ma poi non lo usa, genera una warning:
void funct( int size )
  {
  }
Ad esempio, se compilo con il g++ con l'opzione -Wall -W, il output leggo:
warning: unused parameter `int i'
Non capita molto spesso di dichiarare una funzione o un metodo che non
utilizza uno dei propri parametri, ma in C++, a causa del polimorfismo,
alcune volte puo' avere senso, ad esempio quando un metodo virtuale viene
ridefinito in una classe derivata. Infatti non e' detto che il nuovo metodo
debba utilizzare tutti i parametri che gli vengono passati.
Per evitare la warning (visto che e' buona regola fare in modo che i propri
programmi non ne generino nessuna) e' sufficiente specificare il parametro
senza dargli un nome:
void funct( int )
  {
  }
1) Un piccolo trucco per aumentare la leggibilita' e lasciare il nome tra
commenti:
void funct( int /* size */ )
  {
  }
Nel caso concreto dell'esempio infatti sappiamo ancora che il parametro che
verra' passato alla funzione rappresenta una "dimensione" (qualunque cosa
questo voglia dire), anche se poi non lo utilizziamo.
2) Aggiungere una riga del tipo "size;" alla funzione predecente
praticamente non genera codice ma puo' ancora servire per eliminare la
warning "unused". 
In realta' (almeno con il g++) questo codice produce poi un'altra warning
del tipo "warning: statement with no effect" quindi non ne vedo l'utilita',
ma forse puo' essere utile in qualche altro caso.
Per questo genere di dettagli, trucchi e "finezze" da utilizzare in C++ ti
consiglio il libro "C++ Manuale Di Stile" di Carlo Pescio. Praticamente lo
consiglio sempre nei miei post... :-)
Ciao!
-- 
Qual'e' il colmo per uno studente-lavoratore?
Avere un quadrato che si crede un rettangolo.