View Full Version : C, Alcune domande su sintassi
Ciao a tutti...
Leggendo del codice mi sono imbattuto in un paio di righe di cui non ho mai visto la sintassi, qualcuno mi può aiutare?
DATA_TYPE REGPARM(1) glue(glue(__ld, SUFFIX), MMUSUFFIX)(target_ulong addr, int is_user)
{
.....
}
Sembra una funzione ma non riesco a capirne il significato della doppia parentesi...
Grazie
beppegrillo
19-08-2006, 13:08
la seconda è un indice di scorrimento a destra di n bits.
La prima non riesco a capirla bene, ma solitamente si tratta di puntatori a funzioni.
la seconda è un indice di scorrimento a destra di n bits.
La prima non riesco a capirla bene, ma solitamente si tratta di puntatori a funzioni.
In che senso puntatori di funzioni?
Il fatto è che io ho sempre visto funzioni con una singola parentesi dove mettere dentro i parametri, ma questa (sempre che sia una funzione ma non mi viene in mente altro) è del tipo funzione(prima parentesi)(seconda parentesi)... non le ho mai viste prima d'ora. chi può dare delucidazioni?
Grazie
beppegrillo
19-08-2006, 17:36
In che senso puntatori di funzioni?
Il fatto è che io ho sempre visto funzioni con una singola parentesi dove mettere dentro i parametri, ma questa (sempre che sia una funzione ma non mi viene in mente altro) è del tipo funzione(prima parentesi)(seconda parentesi)... non le ho mai viste prima d'ora. chi può dare delucidazioni?
Grazie
http://it.wikibooks.org/wiki/Linguaggio_C/Vettori_e_puntatori/Puntatori
sottovento
20-08-2006, 14:20
DATA_TYPE REGPARM(1) glue(glue(__ld, SUFFIX), MMUSUFFIX)(target_ulong addr, int is_user)
{
.....
}
Sembra una funzione ma non riesco a capirne il significato della doppia parentesi...
Grazie
Hai controllato se sono definite come macro?
Generalmente per avere compatibilita' fra vari sistemi, dichiarazioni che cambiano mediante definizioni in compilazioni, ... si fanno questi giochetti, i quali sono sicuramente poco leggibili.
A mio avviso sembrerebbe che si stia dichiarando una funzione:
- il valore di ritorno e' dato dalla macro DATA_TYPE_REGPARM, che verra' sostituita in precompilazione dal tipo richiesto (probabilmente indicizzato da 1);
- glue() sembrerebbe una macro fatta apposta per "attaccare" insieme i nomi. E' un trucco piuttosto usato, hai due nomi e vuoi ottenere, per esempio, un solo nome dato dalla loro unione. Probabilmente e' qualcosa del tipo
#define glue(a,b) a##b
Con questo trucco stabilisci il nome della funzione che stai dichiarando
- infine hai la lista dei parametri.
Non male... sicuramente poco leggibile. Sembra parte di un grosso progetto software che deve essere configurato in tempo di compilazione.
High Flying
Sottovento
trallallero
21-08-2006, 08:35
...
- glue() sembrerebbe una macro fatta apposta per "attaccare" insieme i nomi. E' un trucco piuttosto usato, hai due nomi e vuoi ottenere, per esempio, un solo nome dato dalla loro unione...
piuttosto usato ? e in che ambito scusa ? io ho lavorato nelle telecomunicazioni e adesso banca ma non l'ho mai visto in nessun programma. Una volta avevo provato ad usarlo ma rovinava la leggibilitá del programma e, sinceramente, lo volevo utilizzare solo perché non l'avevo mai usato :fiufiu: :D
sottovento
21-08-2006, 12:13
piuttosto usato ? e in che ambito scusa ? io ho lavorato nelle telecomunicazioni e adesso banca ma non l'ho mai visto in nessun programma. Una volta avevo provato ad usarlo ma rovinava la leggibilitá del programma e, sinceramente, lo volevo utilizzare solo perché non l'avevo mai usato :fiufiu: :D
Purtroppo e' piuttosto usato. Ho lavorato prevalentemente nel settore spaziale (missioni spaziali soprattutto legate all'Ariane) ed attualmente nell'automazione di grossi impianti industriali. Non posso che darti ragione su tutto, in effetti non e' proprio una bella soluzione.
Comunque certe volte e' utile. (anche se, come sempre, evitabilissimo).
High Flying
Sottovento
trallallero
21-08-2006, 12:29
Purtroppo e' piuttosto usato. Ho lavorato prevalentemente nel settore spaziale (missioni spaziali soprattutto legate all'Ariane) ed attualmente nell'automazione di grossi impianti industriali. Non posso che darti ragione su tutto, in effetti non e' proprio una bella soluzione.
Comunque certe volte e' utile. (anche se, come sempre, evitabilissimo).
High Flying
Sottovento
beh si, il "settore spaziale" mi manca :D
ma non è che c'è un errore di sintassi...? :huh:
io vedo due identificatori (tipo e nome funzione), parentesi tonda aperta (inizio parametri), costante numerica ( :confused: ), parentesi tonda chiusa (fine parametri), un sacco di roba ( :mbe: ), corpo della funzione...
i primi due identificatori sono macro? senza conoscerne la definizione è impossibile determinare la sintassi di quella roba
trallallero
21-08-2006, 12:40
ma non è che c'è un errore di sintassi...? :huh:
io vedo due identificatori (tipo e nome funzione), parentesi tonda aperta (inizio parametri), costante numerica ( :confused: ), parentesi tonda chiusa (fine parametri), un sacco di roba ( :mbe: ), corpo della funzione...
i primi due identificatori sono macro? senza conoscerne la definizione è impossibile determinare la sintassi di quella roba
bah! se non conosci il C lascia stare :O
:sofico:
BountyKiller
21-08-2006, 12:47
sembrerebbe una funzione che ritorna un tipo (utente?) DATA_TYPE mentre REGPARAM(1) potrebbe essere una macrofunzione che diventa una convenzione di chiamata.......
Hai controllato se sono definite come macro?
Generalmente per avere compatibilita' fra vari sistemi, dichiarazioni che cambiano mediante definizioni in compilazioni, ... si fanno questi giochetti, i quali sono sicuramente poco leggibili.
A mio avviso sembrerebbe che si stia dichiarando una funzione:
- il valore di ritorno e' dato dalla macro DATA_TYPE_REGPARM, che verra' sostituita in precompilazione dal tipo richiesto (probabilmente indicizzato da 1);
- glue() sembrerebbe una macro fatta apposta per "attaccare" insieme i nomi. E' un trucco piuttosto usato, hai due nomi e vuoi ottenere, per esempio, un solo nome dato dalla loro unione. Probabilmente e' qualcosa del tipo
#define glue(a,b) a##b
Con questo trucco stabilisci il nome della funzione che stai dichiarando
- infine hai la lista dei parametri.
Non male... sicuramente poco leggibile. Sembra parte di un grosso progetto software che deve essere configurato in tempo di compilazione.
High Flying
Sottovento
Hai centrato perfettamente! Si tratta di qemu, una macchina virtuale tipo vmware open source. In particolare quella macro come hai detto tu (grazie mille!!!) riguarda la gestione dell'mmu via software. Immagino che questa macro quindi serva a mettere insieme l'indirizzo fisico dopo che è stato generato dalla tabella delle pagine (forse non ho scritto in modo corretto ma sono di fretta, ho sonno :D ). La questione è che sto cercando quando invece "spezzetta" l'indirizzo virtuale per poi farne la traduzione, ma già questo mi ha fatto capire moltissime cose.
Grazie
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.