Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Arianespace potrebbe lanciare il primo r...
Google Pixel 10a disponibile al prezzo m...
Microsoft Copilot nei guai: email riserv...
AOC a 399€ su Amazon: QD-OLED 240 Hz e 0...
La Cina ha recuperato dal mare il primo ...
Boeing CST-100 Starliner: la NASA rende ...
hiop e TaDa uniscono le forze per trasfo...
Thermal Grizzly mostra il Ryzen 7 9850X3...
AMD Ryzen 'Olympic Ridge' Zen 6 per desk...
Donald Trump renderà pubbliche in...
Prezzo mai visto da mesi: ECOVACS DEEBOT...
Non solo S26, Samsung sta per lanciare a...
Windows 11 avrà a breve uno Speed...
Ask Intel: l'assistente IA che ti aiuta ...
Nasce Freedom.gov: il portale USA per ag...
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: 22:08.


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