|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Vorrei capire meglio: file1.c Codice:
char buffer[5000]; Codice:
extern char buffer[];
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
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. |
|
|
|
|
|
#4 |
|
Senior Member
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. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
- 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%) |
|
|
|
|
|
|
#6 |
|
Senior Member
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...
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
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]; 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. |
|
|
|
|
|
|
#8 | |||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ehm ... non è proprio banale ma dipende ovviamente da cosa vuoi "supportare" di XML. Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|||
|
|
|
|
|
#9 | ||||||
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
Quote:
Quote:
Quote:
Ma STATIC è applicabile ad 1 array? Mi pare che il compilatore mi abbia detto che aveva le dimensioni troppo grosse l'array ... Quote:
Quote:
__________________
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. |
||||||
|
|
|
|
|
#10 | |||
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 9947
|
Quote:
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:
- 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:
--- Domandone: io adesso uso la variabile dichiarata al inizio file e poi nella funzione in cui la uso metto: Codice:
EXTERN char buffer[]; 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. |
|||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:56.











).








