Puntatori a Funzione[C]

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
matteovid
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 368
Iscrizione: mercoledì 9 dicembre 2009, 9:09
Desktop: Openbox, XFCE, XMonad
Distribuzione: GNU/Linux Arch - openSUSE Leap
Sesso: Maschile
Località: Parma

Re: Puntatori a Funzione[C]

Messaggio da matteovid »

@ ixamit

naturalmente che si può fare in modo leggibile e molto migliore, volevo solo postare un esempio per Gila, se intravedeva qualcosa su come affrontare la pointer function compare della qsort in modo da superare con le operazioni di shift il problema della variabile costante come contatore dei cicli che si scambia della qsort sudetta...
la tua prova della funzione è ottima, ma se ci si pensa si può fare tutto con una linea di codice, poi che sia leggibile ho i miei dubbi, comunque la tua funzione è leggibilissima per me... ok che ho a che fare con shift e lettura bit ogni giorno...

@ Gila

nella libreria GNU, qsort_r e Link1

[OT]
Per quanto riguarda il Thererim e l'antenna con cui posizioni le mani per suonare ti metto dei link:
Link1
per il VCA
Link2

poi puoi dirmi nei MP le tue impressioni... Attenzione io negli MP non dò assistenza sulla programmazione, perchè prima di tutto non sono un programmatore esperto, conosco il C per quanto riguarda programmare a medio livello ...
Certamente negli MP si può parlare di elettronica o quello che vuoi... sarebbe un piacere :shy:
[/OT]

grazie per l'erede, tra 12/18 giorni, siamo in attesa...

Matteo
miglia da percorrere, prima di dormire
ixamit
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 499
Iscrizione: giovedì 14 novembre 2013, 10:16

Re: Puntatori a Funzione[C]

Messaggio da ixamit »

@Matteo
si puo' anche su una singola riga, ma senza "strafare" si puo' togliere il ternario. Credo continui ad essere leggibile:

Codice: Seleziona tutto

...
    for (pu_str[lb]=0;lb;c>>=1)
        pu_str[--lb] = (c&1)+'0';
...
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

@Matteovid

Stavo provando la qsort_r, teoricamente inclusa in <stdlib.h>, ma in fase di compilazione, non viene trovata.
Facendo ricerche in rete, dice ce viene aggiunta dalla versione 2.8 di glibc e io ho la 2.15, quindi dovrebbe essere ok.
Ma non compila lo stesso.
Ho letto anche però, che molti consigliano di fare variabili globali...era in inglese e io non sono un drago, ma il senso
sembrava di chi ti dice che il gioco non vale la candela.

Ti ringrazio molto per il link, ma credo a sto punto che sarebbe meglio lasciare stare per ora.

Quello che davvero conta è che non si può passare un altro argomento a cmp, perchè si va contro il prototipo di qsort.
Forse ci siamo intesi male, ma mi sembrava di capire che ero io a non riuscirci, non che no si poteva.

Per quello che m'impuntavo per esempio a fare il puntatore a funzione di un funzione di libreria (il famoso sin).
Aggiungevo un parametro in più rispetto al prototipo e subito arrivava il warning.
Lo stesso ragionamento facevo con qsort... e infatti usciva il warning.
Poi...leggendo che invece si poteva fare, sono ammattito...ora lo so.
E spiegato tutto il giro dell'oca di sin e quant'altro :)
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

Per concludere il discorso del passaggio di un terzo parametro alla funzione di cmp.

Stavo riflettendo, e credo (non vorrei spararla grossa), che su queste cose s'inizia a vedere i limiti dei linguaggi ad alto livello.
Anche se, a detta degli esperti, è quello più vicino alla macchina rispetto ad altri linguaggi. ripeto solo pari pari.

Comunque, credo che in assembler, il discorso sarebbe fattibile e "molto" più semplice no?
Basterebbe contare i salti che si fanno, o monitorare lo stcack.
Facendo un paragono un po' forzato, l'asm dei pic c'era l'istruzione CALL, e mi pare (ora non ricordo bene) si potesse monitorare lo stack.
Credo che sia un discorso analogo anche qui.
Non passi nulla in più a cmp, monitori solo lo stack.
Ho iniziato a studiare un po' il debugger (gdb), a grandi linee.
Pensavo fosse solo un piccolo tool, ma mi sa che mi sbagliavo alla grande...disassembla pure da C a ASM.
Mi sono divertito un po' a guardare il listato ASM :D Ma i tempi non sono ancora maturi.
Però resto dell'idea che se si ha voglia, tempo, pazienza andrebbe studiato prima l'asm, e poi il c.
Ti si apre un mondo a mio modo di vedere.
Comunque davvero interessante gdb.
Avatar utente
matteovid
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 368
Iscrizione: mercoledì 9 dicembre 2009, 9:09
Desktop: Openbox, XFCE, XMonad
Distribuzione: GNU/Linux Arch - openSUSE Leap
Sesso: Maschile
Località: Parma

Re: Puntatori a Funzione[C]

Messaggio da matteovid »

Ciao Gila

per compilare con qsort_r
devi abilitare il gcc con qsort_r(): _GNU_SOURCE, usare le convenzioni GNU, non ti consiglerei di farlo per ora...
che ti mettono sì di progredire, ma allo stato attuale non ti servono...

che il gdb sia favoloso è classico, ma bisogna scontrarsi per usarlo, per questo i prof. ci hanno dato come imperativo di usarlo ancor prima di imparare il C, in pratica loro ci hanno messo a disposizione dei listati in C con errori e dovevamo trovarli...
siccome sapevamo l'assembler dei processori Intel, era molto interressante, capire i vari passaggi...

per quanto riguarda il C, non è un linguaggio che puoi fare tutto, se si vuole interagire con l'hardware, ma mette a disposizione molto, poi con l'assembler lo completi, ma solo se vuoi interagire con l'hardware, altrimenti l'assembler serve per migliorare certi passaggi del C, o gli inevitabili colli di bottiglia....

Per la programmazione diciamo normale, e con normale intendo tutto (tranne che interfacciamento con hardware) il C è
Ottimo, non facile ma si può fare tutto... anche farsi del male delle volte, intendo che a volte il C dimostra un limite assurdo e per saltarci fuori bisogna andare di debbuger e a volte fermarsi, a pensare su un foglio bianco, farsi i vari passaggi con la matita e tak ecco la soluzione, come dice il mio Prof. usare la matita a PC spento è la migliore medicina se si vuole avere il lusso di passare con la famiglia il tempo, altrimenti solo PC e tastiera la si sfascia la famiglia...

Matteo
miglia da percorrere, prima di dormire
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

Si, per ora qsort_r(), la lascio perdere.
Importante è aver capito che non è possibile passare un terzo parametro a cmp, se non magari con giri assurdi...che vanno oltre il mio stato attuale.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Puntatori a Funzione[C]

Messaggio da vbextreme »

Importante è aver capito che non è possibile passare un terzo parametro a cmp
E secondo te perchè avrei usato una variabile globale?
Easy framework per il linguaggio C.
vbextreme hack your life
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

vbextreme [url=http://forum.ubuntu-it.org/viewtopic.php?p=4576773#p4576773][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Importante è aver capito che non è possibile passare un terzo parametro a cmp
E secondo te perchè avrei usato una variabile globale?
Certo, ora ho capito.
Mi spiego: tu mi avevi consigliato di lasciar stare per il momento, e che, in fondo, le variabili globali non sono proibite in "toto".
Assimilato questo, pensavo però fosse un buon esercizio per i puntatori a funzione, inserire un parametro in più a cmp.
Ero ignaro del fatto non si potesse farlo, infatti avevo portato l'esempio di sin, aggiungendo un parametro il compilatore dava warning.
Perchè logicamente si andava contro il prototipo di sin. Stesso ragionamento avevo fatto con cmp.
Solo dopo molti tentativi ho scoperto che non si può fare.
Però, tutta sta perdita di tempo, mi ha fatto capire un po' di cose.
Se avessi saputo fin dall'inizio che era impossibile, non ci avrei tentato, ma nessuno esplicitamente me lo ha detto, o forse è sfuggito a me :)
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

Ultima cosa sulla funzione di cmp di qsort.
Forse, ma non provo, non ne vale la pena, un modo per poter aggirare il problema potrebbe essere:
Passo l'array a cmp con un elemento in più , ma a qsort, ordino di comparare l'array, meno un elemento.
Questo elemento lo uso solo per incrementare i passaggi a cmp.
In questo modo non devo passare nulla a cmp, e contemporaneamente (forse) non avrei bisogno di una variabile globale.
Ripeto, è solo un'idea che mi è venuta in mente, ma non ci perdo tempo a provare...volevo solo il vostro parere.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Puntatori a Funzione[C]

Messaggio da vbextreme »

ottima idea gila.
Easy framework per il linguaggio C.
vbextreme hack your life
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

Dici sul serio o sei ironico? :D
Non ho provato, perchè non voglio perdere tempo, ma penso sia fattibile la cosa...diciamo che sarebbe uno stratagemma....
Magari a tempo perso e per divertimento ci proverò....vediamo.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Puntatori a Funzione[C]

Messaggio da vbextreme »

serio serio......bravo...
Easy framework per il linguaggio C.
vbextreme hack your life
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: Puntatori a Funzione[C]

Messaggio da gila75 »

Grazie :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti