Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-12-2006, 04:35   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
[C] E' possibile rendere 1 array locale visibile a tutto il programma?

Chiedo questo perchè vorrei evitare di fare troppe modifiche ai parametri delle funzioni.

Ho provato anche ad usare 1 array extern:
funziona, ma mi da noia il fatto che devo fissargli già esternamente a tutto, main compreso, la dimensione.

es:
Codice:
extern char buffer[5000];
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 09:28   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Matrixbob
Chiedo questo perchè vorrei evitare di fare troppe modifiche ai parametri delle funzioni.

Ho provato anche ad usare 1 array extern:
funziona, ma mi da noia il fatto che devo fissargli già esternamente a tutto, main compreso, la dimensione.

es:
Codice:
extern char buffer[5000];
Non ho ben capito il problema ... vuoi non dover fissare a priori una dimensione per l'array oppure non vuoi mettere extern char buffer[5000]; con la dimensione???

Vorrei capire meglio:
file1.c
Codice:
char buffer[5000];
file2.c
Codice:
extern char buffer[];
non ti va bene??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 10:39   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Giusto per precisare ... visto che non ho ben capito il problema: una variabile dichiarata dentro una funzione sarà sempre e soltanto visibile alla funzione stessa.
EDIT: se la variabile locale ad una funzione fosse dichiarata static, avrebbe durata 'fissa' ma sarebbe comunque visibile solamente all'interno della funzione. Certo ... la funzione potrebbe ritornare o impostare da qualche altra parte un puntatore a quella variabile static ... ma è un altro discorso.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 11-12-2006 alle 10:53.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 12:02   #4
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Allora, io ho 1 file unico x ora.
Chiamiamolo unico.c

Come ultima funzione ho la funzione main.
Sopra al main ho tutte le altre che chiamo (anche se bastava mettere i prototipi delle funzioni mi pare? ).

Tra le funzioni sopra il main ho: salva, comportamento ed immetti.

Salva chiama prima comportamento e dopo immetti.

In comportamento ho scoperto che devo raccogliere delle informazioni, ho deciso di raccoglierle in 1 buffer.

Questo buffer adesso lo posso rendere visibile alla funzione immetti?!
---

[NB]
l'annidamento dei richiami è questo:

> Inizio Salva
>>Comportamento
>>Immetti
> Fine Salva

Adesso si capisce cosa voglio?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 12:13   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Matrixbob
Allora, io ho 1 file unico x ora.
Chiamiamolo unico.c

Come ultima funzione ho la funzione main.
Sopra al main ho tutte le altre che chiamo (anche se bastava mettere i prototipi delle funzioni mi pare? ).

Tra le funzioni sopra il main ho: salva, comportamento ed immetti.

Salva chiama prima comportamento e dopo immetti.

In comportamento ho scoperto che devo raccogliere delle informazioni, ho deciso di raccoglierle in 1 buffer.

Questo buffer adesso lo posso rendere visibile alla funzione immetti?!
---

[NB]
l'annidamento dei richiami è questo:

> Inizio Salva
>>Comportamento
>>Immetti
> Fine Salva

Adesso si capisce cosa voglio?!
Ci sono più modi per fare quello che vuoi:
- Metti la variabile che vuoi "condividere" come globale (fuori dalle funzioni, ad esempio all'inizio del sorgente o comunque prima di dove la usi).
- In Comportamento allochi dinamicamente la variabile che ti serve e poi fai ritornare un puntatore in modo da passarlo poi ad altre funzioni
- Prima di chiamare Comportamento allochi la variabile e passi il puntatore alle funzioni che devono usare la variabile.

Cosa scegliere, dipende ovviamente dal tipo e dimensione della variabile, da cosa devi fare, da quanto sai a priori della variabile, dal "significato" della variabile (è un dato davvero unico e "globale"???), ecc....
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 12:19   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
La cosa più semplice è appunto passarlo come parametro...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 12:43   #7
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da andbin
Cosa scegliere, dipende ovviamente dal tipo e dimensione della variabile, da cosa devi fare, da quanto sai a priori della variabile, dal "significato" della variabile (è un dato davvero unico e "globale"???), ecc....
Ecco io sto ancora lavorando a quel parser, ma senza usare quelle librerie consigliate lo ho scritto da me.

DIMENSIONAMENTO
Ecco al riguardo ho operato come segue.
Per dimensionare il buffer faccio che accedere al file.xml, contarne i caratteri ed utilizzare questo valore per dichiarare:
Codice:
char buffer[char_count];
Faccio questo x evitare segmentation fault od altri probblemi, sbaglio?!

Solo che poi sto buffer deve anche essere stampato dalla funzione immetti, e quindi devo renderglielo visibile.

Voi cosa consigliate?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 13:09   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Matrixbob
Ecco io sto ancora lavorando a quel parser, ma senza usare quelle librerie consigliate lo ho scritto da me.
Cioè ... ti stai scrivendo un parser XML???
Ehm ... non è proprio banale ma dipende ovviamente da cosa vuoi "supportare" di XML.

Quote:
Originariamente inviato da Matrixbob
DIMENSIONAMENTO
Ecco al riguardo ho operato come segue.
Per dimensionare il buffer faccio che accedere al file.xml, contarne i caratteri ed utilizzare questo valore per dichiarare:
Codice:
char buffer[char_count];
Dichiarare un array di dimensione variabile è fattibile solo in C++ o nel C99, non in ANSI "C". Questo solo per precisare ... se ti va bene, per me è ok.

Quote:
Originariamente inviato da Matrixbob
Faccio questo x evitare segmentation fault od altri probblemi, sbaglio?!

Solo che poi sto buffer deve anche essere stampato dalla funzione immetti, e quindi devo renderglielo visibile.

Voi cosa consigliate?!
Se Comportamento e Immetti sono entrambe chiamate nel main, puoi dichiarare quella variabile nel main e passarla ad entrambe le funzioni (essendo un array, passi ovviamente un puntatore).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 18:04   #9
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da andbin
Non ho ben capito il problema ... vuoi non dover fissare a priori una dimensione per l'array oppure non vuoi mettere extern char buffer[5000]; con la dimensione???
Entrambi!

Quote:
Originariamente inviato da Antonio23
se lo dichari con static, rimane visibile anche quando esci dalla funzione in cui l'hai dichiarato...[EDIT] nel senso però che la puoi trattare solo in chiamate a quella funzione, non è questo il tuo caso, scusa..
Quote:
Originariamente inviato da andbin
Giusto per precisare ... visto che non ho ben capito il problema: una variabile dichiarata dentro una funzione sarà sempre e soltanto visibile alla funzione stessa.
EDIT: se la variabile locale ad una funzione fosse dichiarata static, avrebbe durata 'fissa' ma sarebbe comunque visibile solamente all'interno della funzione. Certo ... la funzione potrebbe ritornare o impostare da qualche altra parte un puntatore a quella variabile static ... ma è un altro discorso.
Quindi rimane come 1 traccia indelebile della funzione, come il ricordo di 1 "vita passata" da rincarnazione a rincarnazione?!

Quote:
Originariamente inviato da Antonio23
pensavo che avesse la necessità di mantenere un valore anche fuori dalla funzione - successive chiamate a quella funzione-, mi sono spiegato male, nn mi sembra questo il suo caso.
Infatti!!! Proprio quello.
Ma STATIC è applicabile ad 1 array?
Mi pare che il compilatore mi abbia detto che aveva le dimensioni troppo grosse l'array ...

Quote:
Originariamente inviato da andbin
Ci sono più modi per fare quello che vuoi:
- Metti la variabile che vuoi "condividere" come globale (fuori dalle funzioni, ad esempio all'inizio del sorgente o comunque prima di dove la usi).
- In Comportamento allochi dinamicamente la variabile che ti serve e poi fai ritornare un puntatore in modo da passarlo poi ad altre funzioni
- Prima di chiamare Comportamento allochi la variabile e passi il puntatore alle funzioni che devono usare la variabile.
Quote:
Originariamente inviato da cionci
La cosa più semplice è appunto passarlo come parametro...
La 3 mi piace assai. Che dici Cionci?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 11-12-2006 alle 18:26.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 18:23   #10
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9947
Quote:
Originariamente inviato da andbin
Cioè ... ti stai scrivendo un parser XML???
Ehm ... non è proprio banale ma dipende ovviamente da cosa vuoi "supportare" di XML.
Si! Ma RSS 2.0 che copre solo 1 casistica non esagerata di casi.
Il Prof. spingeva poichè non perdessi tempo ad imparare le librerie che tu mi avevi indicato.
Lo scopo non è il parser, ma solo 1 pezzetto del progetto.

Quote:
Originariamente inviato da andbin
Dichiarare un array di dimensione variabile è fattibile solo in C++ o nel C99, non in ANSI "C". Questo solo per precisare ... se ti va bene, per me è ok.
Spiego cosa faccio:
- accedo al file.rss
- ne conto i caratteri
- ritorno il loro numero
- alloco 1 array[numero_caratteri]

Così creo array molto grossi effettivamente 200.000 char anche!
Forse meglio mettere delle macro fisse all'inizio?!
Codice:
# define SIZE_BUFFER 5000


Quote:
Originariamente inviato da andbin
Se Comportamento e Immetti sono entrambe chiamate nel main, puoi dichiarare quella variabile nel main e passarla ad entrambe le funzioni (essendo un array, passi ovviamente un puntatore).
Eh farò così o la 3 che hai citato prima.
---

Domandone:
io adesso uso la variabile dichiarata al inizio file e poi nella funzione in cui la uso metto:
Codice:
EXTERN char buffer[];
Va bene anche questa soluzione?!
Sul libro di Kernighan dice che si usa fare anche così per scambiare informazioni tra funzioni.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 11-12-2006 alle 18:29.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2006, 22:43   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Matrixbob
Spiego cosa faccio:
- accedo al file.rss
- ne conto i caratteri
- ritorno il loro numero
- alloco 1 array[numero_caratteri]

Così creo array molto grossi effettivamente 200.000 char anche!
Nessun parser XML fa una cosa del genere! Generalmente si legge un blocco di byte per volta, non tanto grande, roba tipo 4096 bytes o suppergiù. Anzi in genere è l'applicazione e non la libreria del parser che fisicamente legge il file. Al parser viene passato di volta in volta solamente un blocco di tot bytes che il parser analizza per aggiornare il proprio stato interno e fare poi quello che serve, cioè crearsi l'albero dei nodi (metodo DOM) o informare l'applicazione del raggiungimento di certi punti specifici come l'inizio/fine dei tag (metodo SAX).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Quasi la metà degli smartphone at...
DDR5 a 16 dollari al gigabyte: Framework...
Meno di 3kg per 'diventare' bionici: l'u...
Al regalo di San Valentino ci pensa HUAW...
Intel multata in India: 30 milioni di do...
Beast of Reincarnation ha una data di us...
Provati Reno15 e Reno15 FS: analisi comp...
L'Europa sfida la Cina sul litio: in Fin...
Sono 32, di cui 6 nuove, le offerte Amaz...
Rinnovo dei coupon Amazon nascosti: ecco...
Corsair aggiorna la confezione delle RAM...
Ecco tutti i robot aspirapolvere in offe...
Tachyum: dal processore universale alle ...
L'eVTOL tedesco per missioni mediche e m...
Zscaler Threat Report 2026: l'adozione d...
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: 16:56.


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