Newsgroup: it.comp.lang.c++
Titolo: un'altra domanda!!!(anzi spiegazione)

Ciao,
sono sempre io(il solito rompi si intende). Ho un'altra cosa da chiedervi:
ho trovato diverse funzioni dove negli argomenti comparivano cose di cui io
non saprei che farmene. Per esempio:
nome_funzione(HINSTANCE hInstance, HINSTANCE hPrevInstance,
         LPSTR lpszCmdLine, int cmdShow)
ora vi chiedo: che cosa sono? Se non vanno sostituiti con dei valori allora
a che servono? e per ultima cosa, come si utilizzano?
Ringrazio anticipatamente(come al solito) e ringrazio anche coloro che hanno
risposto al mio precedente messaggio e mi hanno consigliato dei tutorial sul
C++(che perň non ho potuto nemmeno "odorare" perchč non conosco l'inglese!!!
sigh :'-c).

Penso che tutto dipenda un pochino, ma solo un pochino, da
nome_funzione()......
Luc.



Traduzione
la funzione nome_funzione si aspetta 4 parametri di cui il primo è di tipo
HINSTANCE , il secondo pure il terzo è di tipo LPSTR ed il quarto di tipo int.
Il tipo dei parametri è accompagnato dal loro nome  a cui la funzione farà
riferimento nel suo corpo.
Questo significa che la funzione farà riferimento ad una variabile di nome
hInstance che è di tipo HINSTANCE e che è il primo parmetro ricevuto in input.
==================================================
E gia' che la verita' e' solo un' interpretazione
finche' il contrario non accadra'
==================================================


nome_funzione mi sembra scopiazzata dalla classica WinMain. 
Come ti hanno gia' detto, gli argomenti sono i parametri passati alla
funzione, e dato che si tratta della WinMain, potrebbero servirti,
come potrebbero non servirti. Se non ti servono, eviti 4 warning, se
la riscrivi cosi':
nome_funzione(HINSTANCE, HINSTANCE, LPSTR, int)
di modo che il compilatore non ti dica che hai dichiarato le
variabili, e poi mai utilizzate.

 a che servono? e per ultima cosa, come si utilizzano?
Per la specifica 'signature' che citi immagino si tratti di WinMain; per
domande specifiche di un dato ambiente, meglio usare il gruppo apposito,
in questo caso it.comp.programmare.win32.
Piu` in generale, se per una qualsiasi ragione devi scrivere una funzione
con una certa 'signature' prefissata, ma alcuni dei parametri che la
funzione
cosi` ottiene non ti interessano, basta ignorarli nel corpo della funzione
stessa.  A questo scopo, lo standard C++ prevede che tu possa definire la
funzione *senza dare nome ai parametri che intendi ignorare*.
Vediamo un esempio in C++ perfettamente standard.  Potresti avere scritto,
ad esempio, una "meta-funzione" che serve per chiamare N volte un'altra...:
typedef void (*funz_p)(int);
void chiama_N_volte(int N, funz_p pf)
{
    for(int i=0; i<N; ++i) (*pf)(i);
}
(si potrebbe usare una sintassi piu` semplice, ma questa, molto esplicita,
spero sia piu` chiara).
L'uso "normale" di questa "meta-funzione" sarebbe ad esempio:
void pippo(int i)
{
    std::cout<<"pippo #"<<i<<"\n";
}
    ...
    chiama_N_volte(7,pippo);
Ma supponi che la funzione da chiamare N volte, per sua natura, NON abbia
bisogno del parametro intero che la chiama_N_volte le passera`.  Se provi
a scrivere:
void pluto()
{
    std::cout<<"pluto?\n";
}
    ...
    chiama_N_volte(3,pluto);
il compilatore, giustamente, ti 'bacchettera`' per un errore di tipo sul
secondo parametro della chiama_N_volte.  Soluzione?  Basta scrivere la
pluto() in modo da ricevere il parametro E IGNORARLO:
void pluto2(int)
{
    std::cout<<"pluto!\n";
}
    ...
    chiama_N_volte(5,pluto2);
e tutto filera` liscio.
Questo discorso di "meta-funzioni", cioe` funzioni che ricevono puntatori
ad altre funzioni che chiameranno poi in certi modi, e` tipico di varie
librerie e framework, che, per generalita`, spesso si troveranno appunto
a richiedere che le funzioni (cosiddette di "call-back") che tu scrivi e
passi abbiano un tot di parametri di tipi prefissati.  L'esempio canonico
in cui questo e` implicito e` "main", che nella definizione tipica riceve
due argomenti (esistono anche altri overload standard corretti, tipo
quello senza argomenti, ma questo e` perche` main e` un caso speciale).
E se gli argomenti non interessano...?  Risposta: ignorali.  Idealmente,
omettendone il nome nella definizione della funzione (il nome dei parametri
formali puo` sempre essere omesso nella *dichiarazione* della funzione, ma
questa e` un'altra storia; se li ometti nella *definizione*, stai
chiaramente
esprimendo il fatto che non ti interessano, visto che, non nominandoli, non
puoi comunque piu` accedere ad essi...!).
Alex

Premesso che la tua domanda è OT
(Off Topic=non rientra nell'argomento del newsgroup, ovvero il C++)
poichè si tratta di un problema da imputarsi non ad una scarsa conoscenza
del C++,
non del C, ma della programmazione in generale:
premesso che questo newsgroup pullula ormai di persone
che chiedono aiuto in rete senza aver mai aperto un libro,
premesso che la diffusione al costo di supporto dei programmi
(incluso i compilatori) è una piaga sociale anziche' un bene
(mezza Italia si mette a programmare)
ecco la risposta: in genere le funzioni (in tutti i linguaggi)
accettano dei parametri come argomento per pilotarne l'esecuzione.
In genere nel luogo in cui si trova la suddetta
funzione , o li' vicino, (il luogo e' la libreria:
il luogo li' vicino e' la documentazione allegata, sotto forma di file di
help)
si trova la documentazione sul significato dei parametri della funzione.
Se non trovi la documentazione, o non la capisci perche' non sai l'inglese,
questo non implica che i parametri siano "inutili" o che tu "non sappia cosa
fartene".
Esempio, tratto dal Windows SDK (Software Development Kit), te lo installa
qualunque compilatore:
[BEGIN]
The ShellExecute function opens or prints a specified file. The file can be
an executable file or a document file. See ShellExecuteEx also.
HINSTANCE ShellExecute(
    HWND hwnd, // handle to parent window
    LPCTSTR lpOperation, // pointer to string that specifies operation to
perform
    LPCTSTR lpFile, // pointer to filename or folder name string
    LPCTSTR lpParameters, // pointer to string that specifies
executable-file parameters
    LPCTSTR lpDirectory, // pointer to string that specifies default
directory
    INT nShowCmd  // whether file is shown when opened
   );
Parameters
hwnd
Specifies a parent window. This window receives any message boxes that an
application produces. For example, an application may report an error by
producing a message box.
lpOperation
Pointer to a null-terminated string that specifies the operation to perform.
The following operation strings are valid:
String Meaning
"open" The function opens the file specified by lpFile. The file can be an
executable file or a document file. The file can be a folder to
open..............................
[END]

a che servono? e per ultima cosa, come si utilizzano?
Evidentemente ti stai riferendo alla WinMain tipica dei programmi C
scritti per Windows. La funzione in questione viene chiamata da
Windows stesso e quei valori sono forniti dal sistema.
Il primo e' l'handle all'istanza dell'applicazione, il secondo e'
sempre NULL nelle versioni del sistema operativo a 32 bit (e' un
retaggio dei sistemi a 16 bit), il terzo e' la linea di comando del
programma e il quarto e' un flag che indica il modo di visualizzazione
della finestra. Non puoi, comunque, farne a meno.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

 in questo caso it.comp.programmare.win32.
L'ho anche pensato che fosse una domanda OT ma mi sono detto provo a
chiederlo tanto al massimo mi mandano a quel paese e mi dicono in quale NG
chiedere:-)
Comunque grazie per la risposta (anche se mi ci vorrà un bel po' di tempo
per capire l'esempio, daltronde sono ancora un principiante :-))





 (mezza Italia si mette a programmare)
che intendi dire?(non capisco).
Comunque ti ringrazio per la risposta e mi scuso per aver posto un
quesito(anzi più che altro di aver chiesto spiegazioni) non idoneo
all'argomento di queso NG. Cerchero' di non far ripetere questo
inconveniente. Ora vi saluto
Bagugga


Io lo traduco cosě:
"Siccome io sono un programmatore figo che sa tutto piu' degli altri che ha
imparato senza chiedere mai, che ha paura della concorrenza rispondo in maniera
superba e arrogante ad una domanda (anche se un po' ingenua)"
Non e' il contenuto della risposta che mi ha irritato ma il tono ...


 Non e' il contenuto della risposta che mi ha irritato ma il tono ...
Già. Anch'io l'ho interpretato così, ma non sono venuto in questo gruppo per
litigare e ho lasciato perdere(potete offendermi quanto mi pare che tanto a
me non me ne può fregare di meno).
Comunque visto che in parecchi mi hanno detto che la mia domanda era ingenua
ora spiego perchè l'ho fatta:
vi ho sentito spesso di parlare di istanza e io credevo che l'argomento
HINSTANCE hInstanche fosse legato a questa istanza di cui voi avete
parlato(anzi, diciamo scritto che è più appropriato), e questo è anche il
motivo per cui ho pensato che fosse argomento di questo NG e non di
it.comp.programmare.win32.
A proposito, non mi riferivo solo alla funzione WinMain ma anche ad
altre....
Ora vi saluto e come ho già detto la prossima volta farò più attenzione.
Bagugga