Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Opera Neon: il browser AI agentico di nuova generazione
Opera Neon: il browser AI agentico di nuova generazione
Abbiamo provato il nuovo web browser con intelligenza artificiale della serie Opera accessibile tramite abbonamento. Ecco le nostre prime impressioni sulle funzionalità di Opera Neon basate su AI e come funzionano
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-11-2007, 15:58   #1
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
[C++ sintassi] cosa vuol dire ?

void (*set_new_handler(void (*)(void)))(void);

cosa dichiara questo un puntatore di funzione di ...???
boo?!?!?!

preso da: http://en.wikipedia.org/wiki/Signifi...C%2B%2B_Syntax
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 16:26   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Non vorrei dire una boiata, ma la dirò ugualmente

A me a prima vista sembra un puntatore a puntatore di funzione.

In pratica sembra che una funzione generi il puntatore alla funzione che deve essere effettivamente chiamata.

Ripeto però che di costrutti del genere ne ho visti davvero pochi e quindi potrei anche stare facendo una brutta figura nel dire ciò
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 16:37   #3
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da tglman Guarda i messaggi
void (*set_new_handler(void (*)(void)))(void);

cosa dichiara questo un puntatore di funzione di ...???
boo?!?!?!

preso da: http://en.wikipedia.org/wiki/Signifi...C%2B%2B_Syntax
set_new_handler riceve come parametro un puntatore a funzione void f(void) e restituisce un puntatore a funzione dello stesso tipo.
Quella è la dichiarazione in una sola espressione. Generalmente di usano i typedef.

Ultima modifica di tomminno : 16-11-2007 alle 16:44.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 17:40   #4
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
grazie mitici adesso ho capito!!!

io nn riuscivo a capire l'ultimo "(void)"

void (*set_new_handler(void (*)(void)))(void);

e pensavo che set_new_handler fosse stato un puntatore a funzione....

invece no..... set_new_handler è una funzione !!

invece Facendo cosi:
void (*set_new_handler)(void (*)(void))

ho un puntatore a funzione che prende per parametro un puntatore a funzione!

altrimenti cosi :
void (*(*set_new_handler)(void (*)(void)))(void)

ho un puntatore a funzione che prende per parametro un puntatore a funzione e restituisce un puntatore a funzione!

Dovrei aver capito giusto ??
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 18:05   #5
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da tglman Guarda i messaggi
grazie mitici adesso ho capito!!!

io nn riuscivo a capire l'ultimo "(void)"

void (*set_new_handler(void (*)(void)))(void);

e pensavo che set_new_handler fosse stato un puntatore a funzione....

invece no..... set_new_handler è una funzione !!

invece Facendo cosi:
void (*set_new_handler)(void (*)(void))

ho un puntatore a funzione che prende per parametro un puntatore a funzione!

altrimenti cosi :
void (*(*set_new_handler)(void (*)(void)))(void)

ho un puntatore a funzione che prende per parametro un puntatore a funzione e restituisce un puntatore a funzione!

Dovrei aver capito giusto ??
Tanti anni fa quando mi insegnarono il C, mi fecero un discorso strano per quanto riguarda la lettura delle dichiarazioni che ho assimilato come:
leggi il nome: set_new_handler
Procedi a destra fino a trovare una parentesi chiusa o il ;
set_new_handler(void (*)(void))
A questo punto si capisce che set_new_handler è una funzione che accetta un puntatore a funzione void f(void).
Trovando la parentesi chiusa bisogna ritornare a quello che precede il nome.
Siccome noi abbiamo capito che è una funzione, quello che precede il nome è il valore di ritorno e cosa ritorna? Esattamente un void(*)(void) ovvero un puntatore a funzione.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 18:09   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da tomminno Guarda i messaggi
leggi il nome: set_new_handler
Procedi a destra fino a trovare una parentesi chiusa o il ;
set_new_handler(void (*)(void))
veramente con questo algoritmo otterresti:
set_new_handler(void (*)
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2007, 20:58   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 71104 Guarda i messaggi
veramente con questo algoritmo otterresti:
set_new_handler(void (*)
Simpatico!
Chiaro che non è un algoritmo e un essere umano è abbastanza intelligente da capire che la prima parentesi chiusa si riferisce all'ultima parentesi aperta che non è quella di interesse.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2007, 07:18   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Simpatico!


Quote:
Chiaro che non è un algoritmo e un essere umano è abbastanza intelligente da capire che la prima parentesi chiusa si riferisce all'ultima parentesi aperta che non è quella di interesse.
così?
set_new_handler(void (*)(void)))(void)
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2007, 12:37   #9
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 71104 Guarda i messaggi
così?
set_new_handler(void (*)(void)))(void)
Hai messo una parentesi di troppo non ti pare?
Mi sembra che vuoi fare più polemica che altro.
La mia era solo una spiegazione spannometrica, senza nessuna pretesa di costituire nè un algortimo, nè di essere esaustiva. Sicuramente non è sbagliata.

Visto che sei più fresco di me quanto a lettura delle dichiarazioni C, perchè non posti l'algoritmo ufficiale?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2007, 13:00   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Hai messo una parentesi di troppo non ti pare?
no, non mi pare...
a quanto dici la prima parentesi chiusa si riferisce all'ultima parentesi aperta che non è quella di interesse. posto che non ho capito quand'è che una parentesi si definisce "di interesse", io direi che l'ultima parentesi aperta è questa:

void (*set_new_handler(void (*)(void)))(void);

quindi la parentesi chiusa che vi si riferisce è senza dubbio questa:

void (*set_new_handler(void (*)(void)))(void);


Quote:
Visto che sei più fresco di me quanto a lettura delle dichiarazioni C, perchè non posti l'algoritmo ufficiale?
io ovviamente non lo conosco visto che le specifiche del C sono a pagamento, come anche i libri che lo spiegano (pensa che per imparare quel linguaggio ne ho dovuto intuire la sintassi leggendo quello che trovavo in internet, tra tutorial e codici di esempio; MSDN l'ho scoperta dopo), ma questo non mi vieta di fare delle osservazioni indipendenti dal linguaggio.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2007, 14:44   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 71104 Guarda i messaggi
no, non mi pare...
a quanto dici la prima parentesi chiusa si riferisce all'ultima parentesi aperta che non è quella di interesse. posto che non ho capito quand'è che una parentesi si definisce "di interesse", io direi che l'ultima parentesi aperta è questa:

void (*set_new_handler(void (*)(void)))(void);

quindi la parentesi chiusa che vi si riferisce è senza dubbio questa:

void (*set_new_handler(void (*)(void)))(void);
Ripremesso che quello che ho scritto non è un algoritmo nè pretende di essere esaustivo.
Non so come vengano parserizzate tali dichiarazioni dal parser, a me hanno insegnato a leggerle così: si parte dal nome e si prosegue a destra fino a trovare una parentesi tonda chiusa che non abbia come riferimento una parentesi aperta o il ; quindi si legge a sinistra del nome fino a trovare una parentesi aperta o l'inizio dell'espressione. La parentesi aperta comporta che bisogna tornare a leggere a destra tutti i caratteri non ancora presi in considerazione. E così via fino a che non si sono consumati tutti i caratteri dell'espressione.
(ok forse questo è un algoritmo )

Partendo dall'espressione
void (*set_new_handler(void (*)(void)))(void);

Individuato il nome "set_new_handler" (come si individua il nome? boh, a intuito la seconda sequenza di caratteri ammissibili per un nome di variabile o funzione, anche se in C c'è la possibilità di non specificare il tipo dichiarandolo implicitamente int, quindi non una regola generale),
Subito dopo si trova una parentesi aperta, questa set_new_handler( è la parentesi aperta di interesse, bisogna scorrere l'espressione fino a trovare la prima parentesi chiusa che non abbia come corrispondente nessuna parentesi aperta.
La presenza della parentesi tonda fa capire che è una funzione, all'interno c'è una sequenza void (*)(void) prima di incontrare la parentesi chiusa che racchiude tutto l'argomento e che è relativa alla parentesi aperta che stiamo prendendo in considerazione.

La parentesi successiva set_new_handler(void (*)(void))) indica che bisogna tornare a leggere quello che c'è scritto prima del nome.
Prima del nome troviamo * che indica puntatore, quindi set_new_handler riceve come parametro un puntatore a funzione e restituisce un puntatore.
Puntatore di che tipo? La "regola" vuole che si continui a leggere verso sinistra fino a trovare o l'inizio dell'espressione o una parentesi aperta.
Trovando quindi la parentesi aperta void (*, questo indica che set_new_handler restituisce un puntatore a funzione visto che * è contenuto tra 2 parentesi tonde. La parentesi aperta obbliga a tornare a leggere verso destra a partire dalla parentesi chiusa set_new_handler(void (*)(void))), in quanto questa è già stata presa in considerazione . Quindi troviamo l'argomento (void) e la fine dell'espressione che obbliga a leggere nuovamente a sinistra che ci porta ad incontrare un bel void.
Quindi abbiamo un puntatore a funzione, sappiamo che quello che è a destra è l'argomento e quello che è a sinistra è il valore restituito, quindi set_new_handler restituisce un puntatore a funzione che accetta void e restituisce void.

Quote:
io ovviamente non lo conosco visto che le specifiche del C sono a pagamento, come anche i libri che lo spiegano (pensa che per imparare quel linguaggio ne ho dovuto intuire la sintassi leggendo quello che trovavo in internet, tra tutorial e codici di esempio; MSDN l'ho scoperta dopo), ma questo non mi vieta di fare delle osservazioni indipendenti dal linguaggio.
Continuo a non capire se mi stai prendendo in giro o no.
Siccome di programmazione ne sai probabilmente più di me, continuo a pensare che lo fai apposta, visto che se lo hanno insegnato a me nell'unico corso dove hanno spiegato qualcosa di programmazione, sicuramente l'hanno spiegato anche a te.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2007, 20:20   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
sono pigro, non voglio leggere
ci ho provato più volte, ma tutte le volte mi perdo verso metà. rispondo solo a questo:

Quote:
Originariamente inviato da tomminno Guarda i messaggi
Continuo a non capire se mi stai prendendo in giro o no.
Siccome di programmazione ne sai probabilmente più di me, continuo a pensare che lo fai apposta, visto che se lo hanno insegnato a me nell'unico corso dove hanno spiegato qualcosa di programmazione, sicuramente l'hanno spiegato anche a te.
io chiedo e basta
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
Propaganda russa e hactivism fra le prin...
Superluna del Castoro: stasera il satell...
NVIDIA regala una GeForce RTX 5090 Found...
Snowflake punta su Intelligence, l'IA pe...
Volkswagen realizzerà i propri chip per ...
Formula E GEN4 svelata: 600 kW di potenz...
PC Desktop HP Victus con RTX 4060 e Ryze...
Fastnet, il 'mega-cavo' di AWS che pu&og...
Offerte Amazon da non perdere: GeForce R...
Clima, l'UE trova l'accordo sul taglio d...
Corsair RMx Shift Gen 2: gli alimentator...
Windows 95 torna accessibile a chiunque ...
AGCOM cambia la lista dei siti porno con...
Internet Archive, le battaglie legali so...
Michael Burry sfida la febbre AI: maxi s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v